উত্তর:
সাধারণত RuntimeExceptions হয় ব্যতিক্রম যে প্রোগ্রামের মাধ্যমে প্রতিরোধ করা যায়। যেমন NullPointerException
, ArrayIndexOutOfBoundException
। আপনি যদি null
কোনও পদ্ধতি কল করার আগে পরীক্ষা করেন NullPointerException
তবে কখনই ঘটবে না। একইভাবে ArrayIndexOutOfBoundException
আপনি যদি সূচকটি প্রথমে পরীক্ষা করেন তবে কখনই ঘটবে না। RuntimeException
সংকলক দ্বারা পরীক্ষা করা হয় না, তাই এটি পরিষ্কার কোড।
সম্পাদনা : আজকাল লোকেরা পছন্দ করে RuntimeException
কারণ এটি পরিষ্কার কোড তৈরি করে। এটি সম্পূর্ণ ব্যক্তিগত পছন্দ।
RuntimeException
হ'ল কারণ এটি সহজ, এবং চেক করা এবং চেক না করা ব্যতিক্রমগুলির মধ্যে পার্থক্য সম্পর্কে চিন্তাভাবনা করার প্রয়োজন বোধ করে। আমি মনে করি রানটাইম ব্যতিক্রম সংক্রামক একটি ভয়ানক ধারণা কারণ আপনার যেমন অপুনরুদ্ধারযোগ্য ব্যতিক্রম ধরা করব NullPointerException
।
জাভাতে দুটি ধরণের ব্যতিক্রম রয়েছে: চেক করা ব্যতিক্রম এবং চেক করা ব্যতিক্রম। একটি পরীক্ষিত ব্যতিক্রম অবশ্যই কোড দ্বারা স্পষ্টভাবে পরিচালনা করা উচিত, অন্যদিকে, একটি চেক না হওয়া ব্যতিক্রমটি স্পষ্টভাবে হ্যান্ডেল করার প্রয়োজন হয় না।
পরীক্ষিত ব্যতিক্রমগুলির জন্য, আপনাকে কোডটির আশেপাশে একটি চেষ্টা / ক্যাপ ব্লক স্থাপন করতে হবে যা সম্ভাব্যভাবে ব্যতিক্রম ছুঁড়ে ফেলতে পারে, বা পদ্ধতিতে একটি "নিক্ষেপ" ধারা যুক্ত করতে হবে, যাতে পদ্ধতিটি এই ধরণের ব্যতিক্রম ছুঁড়ে দিতে পারে (যা হতে হবে কলিং ক্লাস বা তারপরে হ্যান্ডলড)।
"ব্যতিক্রম" থেকে উদ্ভূত যে কোনও ব্যতিক্রম হ'ল চেক করা ব্যতিক্রম, অন্যদিকে রানটাইম এক্সেকশন থেকে প্রাপ্ত ক্লাসটি চেক করা হয়নি। রানটাইম এক্সেপশনগুলি স্পষ্টভাবে কলিং কোড দ্বারা পরিচালনা করার দরকার নেই।
শ্রেণি java.lang.RuntimeException
এবং java.lang.Exception
শ্রেণীর মধ্যে পার্থক্য দেখার আগে আপনাকে অবশ্যই Exception
শ্রেণিবদ্ধতা সম্পর্কে জানতে হবে । উভয় Exception
এবং Error
ক্লাস ক্লাস থেকে উদ্ভূত হয় Throwable
(যা ক্লাস থেকে উদ্ভূত Object
)। এবং ক্লাস ক্লাস RuntimeException
থেকে উদ্ভূত হয় Exception
।
সমস্ত ব্যতিক্রম হয় হয় Exception
বা থেকে প্রাপ্ত RuntimeException
।
সকল ব্যতিক্রম যা থেকে আহরণ করা RuntimeException
হিসেবে উল্লেখ করা হয় অবারিত ব্যতিক্রম। এবং অন্যান্য সমস্ত ব্যতিক্রম চেক ব্যতিক্রম পরীক্ষা করা হয় । একটি পরীক্ষিত ব্যতিক্রম অবশ্যই আপনার কোডের কোথাও ধরা উচিত, অন্যথায় এটি সংকলন করবে না। এজন্য তাদের চেক করা ব্যতিক্রম বলা হয়। অন্যদিকে, যাচাই করা ব্যতিক্রমগুলি সহ, কলিং পদ্ধতিটি এটি পরিচালনা বা ঘোষণা করার কোনও বাধ্যবাধকতার অধীন নয়।
সুতরাং যে সমস্ত ব্যতিক্রমগুলি সংকলক আপনাকে পরিচালনা করতে বাধ্য করে সেগুলি থেকে সরাসরি প্রাপ্ত java.lang.Exception
এবং অন্য যেগুলি সংকলক আপনাকে পরিচালনা করতে বাধ্য করে না সেগুলি থেকে প্রাপ্ত java.lang.RuntimeException
।
রানটাইমএক্সসেপশনের প্রত্যক্ষ পরিচিত উপশ্রেণী নিম্নলিখিত রইল ।
AnnotationTypeMismatchException,
ArithmeticException,
ArrayStoreException,
BufferOverflowException,
BufferUnderflowException,
CannotRedoException,
CannotUndoException,
ClassCastException,
CMMException,
ConcurrentModificationException,
DataBindingException,
DOMException,
EmptyStackException,
EnumConstantNotPresentException,
EventException,
IllegalArgumentException,
IllegalMonitorStateException,
IllegalPathStateException,
IllegalStateException,
ImagingOpException,
IncompleteAnnotationException,
IndexOutOfBoundsException,
JMRuntimeException,
LSException,
MalformedParameterizedTypeException,
MirroredTypeException,
MirroredTypesException,
MissingResourceException,
NegativeArraySizeException,
NoSuchElementException,
NoSuchMechanismException,
NullPointerException,
ProfileDataException,
ProviderException,
RasterFormatException,
RejectedExecutionException,
SecurityException,
SystemException,
TypeConstraintException,
TypeNotPresentException,
UndeclaredThrowableException,
UnknownAnnotationValueException,
UnknownElementException,
UnknownTypeException,
UnmodifiableSetException,
UnsupportedOperationException,
WebServiceException
একটি ব্যতিক্রম চেক করা হয়, এবং একটি রানটাইম এক্সেকশন চেক করা হয় না।
চেক করা মানে হ'ল সংকলকটির প্রয়োজন হয় যে আপনি ব্যতিক্রমটিকে একটি ক্যাচগুলিতে পরিচালনা করতে পারেন, বা আপনার পদ্ধতিটিকে এটি নিক্ষেপ হিসাবে ঘোষণা করুন (বা এর একটি চশমাগুলির মধ্যে একটি)।
সাধারণত, যদি এপিআই এর কলার ব্যতিক্রমটি পরিচালনা করে এমন প্রত্যাশা করা হয় এবং যদি কলার এমন কিছু হয় তবে চেক করা ব্যতিক্রম যেমন প্যারামিটারগুলির একটিতে ত্রুটি, যেমন কোনও প্রোগ্রামিং যেমন হ্যান্ডেল করতে সক্ষম হয় না তবে ভুল।
রানটাইম ব্যতিক্রম ক্লাসগুলি (রানটাইম এক্সেপশন এবং এর সাবক্লাস) সংকলন-সময় চেকিং থেকে অব্যাহতিপ্রাপ্ত, যেহেতু সংকলক প্রতিষ্ঠা করতে পারে না যে রান-টাইম ব্যতিক্রম ঘটতে পারে না। (জেএলএস থেকে)।
আপনি যে ক্লাসগুলি ডিজাইন করেছেন সেগুলিতে আপনার ব্যতিক্রম সাবক্লাস করা উচিত এবং কোনও ব্যতিক্রমী দৃশ্যের সিগন্যাল করার জন্য এর উদাহরণ নিক্ষেপ করা উচিত । এটি করার ফলে আপনি স্পষ্টভাবে আপনার ক্লাসের ক্লায়েন্টদের ইঙ্গিত দিচ্ছেন যে আপনার শ্রেণীর ব্যবহার ব্যতিক্রম হতে পারে এবং এই ব্যতিক্রমী পরিস্থিতিগুলি হ্যান্ডেল করার জন্য তাদের পদক্ষেপ নিতে হবে।
নীচে কোড স্নিপেটগুলি এই বিষয়টি ব্যাখ্যা করে:
//Create your own exception class subclassing from Exception
class MyException extends Exception {
public MyException(final String message) {
super(message);
}
}
public class Process {
public void execute() {
throw new RuntimeException("Runtime");
}
public void process() throws MyException {
throw new MyException("Checked");
}
}
ক্লাসের উপরে বর্গ সংজ্ঞা প্রক্রিয়া , পদ্ধতি execute
একটি নিক্ষেপ করতে পারেন RuntimeException কিন্তু পদ্ধতি ঘোষণা প্রয়োজন নির্দিষ্ট করে না এটি ছোঁড়ার RuntimeException ।
পদ্ধতিটি process
একটি পরীক্ষিত ব্যতিক্রম ছুঁড়ে ফেলেছে এবং এটি ঘোষণা করতে হবে যে এটি মাইএক্সেপশন ধরণের একটি পরীক্ষিত ব্যতিক্রম ছুঁড়ে ফেলবে এবং এটি না করা একটি সংকলন ত্রুটি হবে।
উপরের শ্রেণীর সংজ্ঞাটি সেই কোডটিকে প্রভাবিত করবে যা প্রসেস ক্লাসও ব্যবহার করে ।
কলটি new Process().execute()
একটি বৈধ প্রার্থনা যেখানে ফর্মের কল হিসাবে
new Process().process()
একটি সংকলন ত্রুটি দেয়। এটি কারণ হ'ল ক্লায়েন্ট কোডটি হ্যান্ডেল করার পদক্ষেপ নেওয়া উচিত MyException
(কল টু প্রসেসে বলা () একটি চেষ্টা / ক্যাচ ব্লকে আবদ্ধ থাকতে পারে)।
রানটাইম এক্সসেপশনের সঠিক ব্যবহার?
চেক করা ব্যতিক্রম থেকে - বিতর্ক :
যদি কোনও ক্লায়েন্ট যুক্তিযুক্তভাবে কোনও ব্যতিক্রম থেকে পুনরুদ্ধার আশা করে, তবে এটি একটি চেক করা ব্যতিক্রম করুন। যদি কোনও ক্লায়েন্ট ব্যতিক্রম থেকে পুনরুদ্ধার করতে কিছু করতে না পারে, তবে এটি একটি চেক করা ব্যতিক্রম করুন।
মনে রাখবেন যে RuntimeException
একটি চেক করা ব্যতিক্রম হ'ল এটি থেকে প্রাপ্ত এবং চেক করা ব্যতিক্রম একটি থেকে প্রাপ্ত Exception
।
RuntimeException
যদি ক্লায়েন্ট ব্যতিক্রম থেকে পুনরুদ্ধার করতে কিছু করতে না পারে তবে কেন ফেলে দিন ? নিবন্ধটি ব্যাখ্যা করেছে:
রানটাইম ব্যতিক্রমগুলি এমন সমস্যাগুলির প্রতিনিধিত্ব করে যা কোনও প্রোগ্রামিং সমস্যার ফলস্বরূপ এবং এপিআই ক্লায়েন্ট কোডটি তাদের কাছ থেকে পুনরুদ্ধার করা বা কোনও উপায়ে হ্যান্ডেল করার পক্ষে যুক্তিসঙ্গতভাবে আশা করা যায় না। এই জাতীয় সমস্যাগুলির মধ্যে গাণিতিক ব্যতিক্রমগুলি অন্তর্ভুক্ত রয়েছে যেমন শূন্য দ্বারা ভাগ করা; পয়েন্টার ব্যতিক্রম যেমন নাল রেফারেন্সের মাধ্যমে কোনও বস্তু অ্যাক্সেস করার চেষ্টা করা; এবং সূচক ব্যতিক্রম যেমন খুব বড় বা খুব ছোট একটি সূচকের মাধ্যমে একটি অ্যারের উপাদান অ্যাক্সেস করার চেষ্টা করা।
ওরাকল ডকুমেন্টেশন থেকে:
নীচের লাইনের গাইডলাইনটি এখানে: কোনও ক্লায়েন্ট যদি ব্যতিক্রম থেকে যথাযথভাবে পুনরুদ্ধার আশা করতে পারে তবে এটিকে একটি পরীক্ষিত ব্যতিক্রম করুন। যদি কোনও ক্লায়েন্ট ব্যতিক্রম থেকে পুনরুদ্ধার করতে কিছু করতে না পারে, তবে এটি একটি চেক করা ব্যতিক্রম করুন।
রানটাইম ব্যতিক্রমগুলি এমন সমস্যাগুলির প্রতিনিধিত্ব করে যা কোনও প্রোগ্রামিং সমস্যার ফলস্বরূপ এবং এপিআই ক্লায়েন্ট কোডটি তাদের কাছ থেকে পুনরুদ্ধার করা বা কোনও উপায়ে হ্যান্ডেল করার পক্ষে যুক্তিসঙ্গতভাবে আশা করা যায় না।
রানটাইম এক্সেপশনস যেমন "এপিআইয়ের অবৈধ ব্যবহারের মাধ্যমে ব্যতিক্রম" রানটাইমেক্সেপসের উদাহরণ: ইলিজালস্টেট স্টেপ এক্সেপশন, নেগেটিভআরাই সাইজ এক্সেপশন, নালপয়েন্টার এক্সসেপশন
ব্যতিক্রমগুলির সাথে আপনাকে অবশ্যই এটি স্পষ্টভাবে ধরতে হবে কারণ আপনি এখনও পুনরুদ্ধার করতে কিছু করতে পারেন। ব্যতিক্রমগুলির উদাহরণগুলি: আইওএক্সেপশন, টাইমআউট এক্সেপশন, প্রিন্ট এক্সেপশন ...
সহজ কথায়, যদি আপনার ক্লায়েন্ট / ব্যবহারকারী ব্যতিক্রম থেকে পুনরুদ্ধার করতে পারেন তবে এটি একটি চেকড ব্যতিক্রম হিসাবে তৈরি করুন , যদি আপনার ক্লায়েন্ট ব্যতিক্রম থেকে পুনরুদ্ধার করতে কিছু করতে না পারেন তবে এটি চেক না করা রানটাইমএক্সসেপশন করুন । উদাহরণস্বরূপ, একটি রানটাইম এক্সসেপশন একটি প্রোগ্রামেটিক ত্রুটি হবে, শূন্য দ্বারা বিভাজনের মতো, কোনও ব্যবহারকারী এ সম্পর্কে প্রোগ্রামার নিজে ছাড়া কিছুই করতে পারে না, তবে এটি রানটাইম এক্সসেপশন ।
রানটাইম এক্সসেপশন ব্যতিক্রম শ্রেণির একটি শিশু শ্রেণি
এটি ব্যতিক্রম শ্রেণির অনেকগুলি শিশু শ্রেণীর মধ্যে একটি। জাভা ভার্চুয়াল মেশিনের স্বাভাবিক ক্রিয়াকলাপের সময় নিক্ষিপ্ত হওয়া ব্যতিক্রমগুলির রানটাইমএক্সেপশন হ'ল সুপারক্লাস। কোনও পদ্ধতিতে তার থ্রোসে রানটাইমএক্সেপশনের যে কোনও সাবক্লাস রয়েছে তা ঘোষণার প্রয়োজন হয় না যে পদ্ধতিটি কার্যকর করার সময় নিক্ষেপ করা হতে পারে তবে ধরা পড়ে না।
হরিচা হয়
java.lang.Object
--- java.lang.Throwable
------- java.lang.Exception
------------- java.lang.RuntimeException
ব্যতিক্রমগুলি আপনার অ্যাপ্লিকেশন প্রবাহে অপ্রত্যাশিত ইভেন্টগুলি পরিচালনা করার একটি ভাল উপায়। রানটাইম এক্সসেপশনটি কম্পাইলার দ্বারা চেক করা হয়নি তবে আপনি আপনার এপিআই ক্লায়েন্টদের আচরণ নিয়ন্ত্রণ করতে ব্যতিক্রম শ্রেণি প্রসারিত ব্যতিক্রমগুলি ব্যবহার করতে পছন্দ করতে পারেন কারণ তাদের সংকলনের জন্য ত্রুটিগুলি ধরা প্রয়োজন। এছাড়াও ভাল ডকুমেন্টেশন ফর্ম।
আপনি যদি ক্লিন ইন্টারফেস অর্জন করতে চান তবে আপনার অ্যাপ্লিকেশনটিতে থাকা বিভিন্ন ধরণের ব্যতিক্রম সাবক্লাসে ব্যবহার করুন এবং তারপরে পিতামাতার ব্যতিক্রমটি প্রকাশ করুন।
দুটি ধরণের ব্যতিক্রম রয়েছে, আপনি যদি এই ধরণের ব্যতিক্রম পান তবে আপনি চেক করা ব্যতিক্রম থেকে পুনরুদ্ধার করতে পারেন। রানটাইম ব্যতিক্রম অপরিশোধনযোগ্য, রানটাইম ব্যতিক্রম প্রোগ্রামিং ত্রুটি, এবং প্রোগ্রামার কোডটি লেখার সময় এটির যত্ন নেওয়া উচিত এবং এর কার্যকরকরণ চালিয়ে যাওয়া আপনাকে ভুল ফল দিতে পারে। রানটাইম ব্যতিক্রমগুলি পূর্ব শর্ত লঙ্ঘন সম্পর্কে। আপনার 10 মাপের একটি অ্যারে রয়েছে এবং আপনি 11 তম উপাদানটি অ্যাক্সেস করার চেষ্টা করছেন, এটি অ্যারেআইডেক্স আউটফ্যান্ড বাউন্ডএক্সেপশন নিক্ষেপ করবে
ব্যবহারকারী-সংজ্ঞায়িত ব্যতিক্রম পরীক্ষা করা ব্যতিক্রম বা চেক করা ব্যতিক্রম চেক করা যেতে পারে, এটি বর্ধিত শ্রেণীর উপর নির্ভর করে।
ব্যবহারকারী-সংজ্ঞায়িত ব্যতিক্রম কাস্টম চেকড ব্যতিক্রম হতে পারে, যদি এটি ব্যতিক্রম শ্রেণিতে প্রসারিত হয়
ব্যবহারকারী-সংজ্ঞায়িত ব্যতিক্রমটি কাস্টম আনচেকড ব্যতিক্রম হতে পারে, যদি এটি রান টাইম ব্যতিক্রম শ্রেণিতে প্রসারিত হয়।
একটি ক্লাস সংজ্ঞায়িত করুন এবং এটি ব্যতিক্রম বা রান টাইম ব্যতিক্রম একটি শিশু করুন