Java.lang.RuntimeException এবং java.lang.Exception এর মধ্যে পার্থক্য


210

কেউ দয়া করে java.lang.RuntimeExceptionএবং এর মধ্যে পার্থক্য ব্যাখ্যা করুন java.lang.Exception? আমি যদি আমার নিজস্ব ব্যতিক্রম তৈরি করি তবে কোনটি বাড়ানোর সিদ্ধান্ত নেব?

উত্তর:


181

সাধারণত RuntimeExceptions হয় ব্যতিক্রম যে প্রোগ্রামের মাধ্যমে প্রতিরোধ করা যায়। যেমন NullPointerException, ArrayIndexOutOfBoundException। আপনি যদি nullকোনও পদ্ধতি কল করার আগে পরীক্ষা করেন NullPointerExceptionতবে কখনই ঘটবে না। একইভাবে ArrayIndexOutOfBoundExceptionআপনি যদি সূচকটি প্রথমে পরীক্ষা করেন তবে কখনই ঘটবে না। RuntimeExceptionসংকলক দ্বারা পরীক্ষা করা হয় না, তাই এটি পরিষ্কার কোড।

সম্পাদনা : আজকাল লোকেরা পছন্দ করে RuntimeExceptionকারণ এটি পরিষ্কার কোড তৈরি করে। এটি সম্পূর্ণ ব্যক্তিগত পছন্দ।


10
আমি "রানটাইম ব্যতিক্রম কলার দ্বারা এড়ানো যেত" এর এই কোণটি পছন্দ করি। এর অর্থ আপনার (কোনও পদ্ধতির কলার হিসাবে) নিশ্চিত হওয়া উচিত যে তারা এমন কি না ঘটে। যদিও চেক করা ব্যতিক্রমগুলি এমন একটি জিনিস যা আপনি এড়াতে পারবেন না এবং পরিবর্তে সত্যের পরে তাদের সাথে ডিল করার প্রয়োজন হয়। (এবং হ্যাঁ, যেহেতু প্রত্যেকে চেক করা ব্যাতিক্রমের ধারণার সাথে একমত নয় এবং অনেকেই প্রতিটি কিছুর জন্য রানটাইম এক্সসেপশন ব্যবহার করেন, তাই এই পার্থক্যটি কিছুটা ঘোলাটে হয়ে গেছে)।
থিলো

4
আজকাল লোকেদের অচিহ্নযুক্ত রানটাইম এক্সেপশনও সমর্থন করে, কারণ এটি জাভা 8 ল্যাম্বদা প্রসেসিংয়ের সাথে সামঞ্জস্যপূর্ণ, যেখানে ব্যতিক্রমের পরীক্ষিত ব্যতিক্রমগুলি পরীক্ষিত নয়।
হার্টমুট পি।

2
আমি সন্দেহ করি লোকেদের আসল কারণটি RuntimeExceptionহ'ল কারণ এটি সহজ, এবং চেক করা এবং চেক না করা ব্যতিক্রমগুলির মধ্যে পার্থক্য সম্পর্কে চিন্তাভাবনা করার প্রয়োজন বোধ করে। আমি মনে করি রানটাইম ব্যতিক্রম সংক্রামক একটি ভয়ানক ধারণা কারণ আপনার যেমন অপুনরুদ্ধারযোগ্য ব্যতিক্রম ধরা করব NullPointerException
ডোনাল

186

জাভাতে দুটি ধরণের ব্যতিক্রম রয়েছে: চেক করা ব্যতিক্রম এবং চেক করা ব্যতিক্রম। একটি পরীক্ষিত ব্যতিক্রম অবশ্যই কোড দ্বারা স্পষ্টভাবে পরিচালনা করা উচিত, অন্যদিকে, একটি চেক না হওয়া ব্যতিক্রমটি স্পষ্টভাবে হ্যান্ডেল করার প্রয়োজন হয় না।

পরীক্ষিত ব্যতিক্রমগুলির জন্য, আপনাকে কোডটির আশেপাশে একটি চেষ্টা / ক্যাপ ব্লক স্থাপন করতে হবে যা সম্ভাব্যভাবে ব্যতিক্রম ছুঁড়ে ফেলতে পারে, বা পদ্ধতিতে একটি "নিক্ষেপ" ধারা যুক্ত করতে হবে, যাতে পদ্ধতিটি এই ধরণের ব্যতিক্রম ছুঁড়ে দিতে পারে (যা হতে হবে কলিং ক্লাস বা তারপরে হ্যান্ডলড)।

"ব্যতিক্রম" থেকে উদ্ভূত যে কোনও ব্যতিক্রম হ'ল চেক করা ব্যতিক্রম, অন্যদিকে রানটাইম এক্সেকশন থেকে প্রাপ্ত ক্লাসটি চেক করা হয়নি। রানটাইম এক্সেপশনগুলি স্পষ্টভাবে কলিং কোড দ্বারা পরিচালনা করার দরকার নেই।


3
ব্যবহারিকভাবে এটি সত্য যে "দুটি ধরণের ব্যতিক্রম রয়েছে", তবে কেন ওরাকল ডকুমেন্টেশনগুলি বলে যে সেখানে তিন প্রকার রয়েছে। এটি তৃতীয় প্রকার হিসাবে ত্রুটি বিবেচনা করে। আমি মনে করি, ত্রুটি মোটেই ব্যতিক্রম নয়, এটি কেবল থ্রোয়েবল (অবজেক্ট), হ্যাঁ, এটি রানটাইম ব্যতিক্রমগুলির আচরণের নকল করে। আপনি এটি সম্পর্কে কি বলবেন? ওরাকল ডক সুত্র। docs.oracle.com/javase/tutorial/essential/exferences/…
আসিফ শাহজাদ

3
একটি ত্রুটি ধরা পড়ার অর্থ নয় (যদিও এটি হতে পারে) আপনি নতুন কোডে কাজ করার সাথে সাথে নিজের ভুলগুলি ধরার জন্য ত্রুটিগুলি ব্যবহার করেন। উদাহরণস্বরূপ, যদি আপনার কাছে গাছ থাকে তবে / অন্যরকম বিবৃতি থাকলে, চূড়ান্ত অন্যটি ত্রুটি ফেলতে পারে ("এই শর্তটি হওয়ার সম্ভাবনা ছিল না")। সাধারণভাবে বলতে গেলে, ব্যতিক্রমগুলির ক্ষেত্রে এমন ঘটনাগুলি ব্যবহার করা হয় যেখানে তারা ঘটতে থাকে বলে সাপেক্ষে ত্রুটিগুলি ব্যবহারের ক্ষেত্রে থাকে না এবং সেগুলি একটি বাগ।
ড্যানি

5
তবে রসিকতাটি রানটাইম এক্সেপশন নিজেই ব্যতিক্রমকে প্রসারিত করে: ডি (আমি জানি এটি কোনও ঝামেলা করে না এবং জেভিএম পুরো প্রসঙ্গটি দেখায়)
আলিরেজা মোহামাদি

94

শ্রেণি 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 

47

একটি ব্যতিক্রম চেক করা হয়, এবং একটি রানটাইম এক্সেকশন চেক করা হয় না।

চেক করা মানে হ'ল সংকলকটির প্রয়োজন হয় যে আপনি ব্যতিক্রমটিকে একটি ক্যাচগুলিতে পরিচালনা করতে পারেন, বা আপনার পদ্ধতিটিকে এটি নিক্ষেপ হিসাবে ঘোষণা করুন (বা এর একটি চশমাগুলির মধ্যে একটি)।

সাধারণত, যদি এপিআই এর কলার ব্যতিক্রমটি পরিচালনা করে এমন প্রত্যাশা করা হয় এবং যদি কলার এমন কিছু হয় তবে চেক করা ব্যতিক্রম যেমন প্যারামিটারগুলির একটিতে ত্রুটি, যেমন কোনও প্রোগ্রামিং যেমন হ্যান্ডেল করতে সক্ষম হয় না তবে ভুল।


15

রানটাইম ব্যতিক্রম ক্লাসগুলি (রানটাইম এক্সেপশন এবং এর সাবক্লাস) সংকলন-সময় চেকিং থেকে অব্যাহতিপ্রাপ্ত, যেহেতু সংকলক প্রতিষ্ঠা করতে পারে না যে রান-টাইম ব্যতিক্রম ঘটতে পারে না। (জেএলএস থেকে)।

আপনি যে ক্লাসগুলি ডিজাইন করেছেন সেগুলিতে আপনার ব্যতিক্রম সাবক্লাস করা উচিত এবং কোনও ব্যতিক্রমী দৃশ্যের সিগন্যাল করার জন্য এর উদাহরণ নিক্ষেপ করা উচিত । এটি করার ফলে আপনি স্পষ্টভাবে আপনার ক্লাসের ক্লায়েন্টদের ইঙ্গিত দিচ্ছেন যে আপনার শ্রেণীর ব্যবহার ব্যতিক্রম হতে পারে এবং এই ব্যতিক্রমী পরিস্থিতিগুলি হ্যান্ডেল করার জন্য তাদের পদক্ষেপ নিতে হবে।

নীচে কোড স্নিপেটগুলি এই বিষয়টি ব্যাখ্যা করে:

//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(কল টু প্রসেসে বলা () একটি চেষ্টা / ক্যাচ ব্লকে আবদ্ধ থাকতে পারে)।


13

রানটাইম এক্সসেপশনের সঠিক ব্যবহার?

চেক করা ব্যতিক্রম থেকে - বিতর্ক :

যদি কোনও ক্লায়েন্ট যুক্তিযুক্তভাবে কোনও ব্যতিক্রম থেকে পুনরুদ্ধার আশা করে, তবে এটি একটি চেক করা ব্যতিক্রম করুন। যদি কোনও ক্লায়েন্ট ব্যতিক্রম থেকে পুনরুদ্ধার করতে কিছু করতে না পারে, তবে এটি একটি চেক করা ব্যতিক্রম করুন।

মনে রাখবেন যে RuntimeExceptionএকটি চেক করা ব্যতিক্রম হ'ল এটি থেকে প্রাপ্ত এবং চেক করা ব্যতিক্রম একটি থেকে প্রাপ্ত Exception

RuntimeExceptionযদি ক্লায়েন্ট ব্যতিক্রম থেকে পুনরুদ্ধার করতে কিছু করতে না পারে তবে কেন ফেলে দিন ? নিবন্ধটি ব্যাখ্যা করেছে:

রানটাইম ব্যতিক্রমগুলি এমন সমস্যাগুলির প্রতিনিধিত্ব করে যা কোনও প্রোগ্রামিং সমস্যার ফলস্বরূপ এবং এপিআই ক্লায়েন্ট কোডটি তাদের কাছ থেকে পুনরুদ্ধার করা বা কোনও উপায়ে হ্যান্ডেল করার পক্ষে যুক্তিসঙ্গতভাবে আশা করা যায় না। এই জাতীয় সমস্যাগুলির মধ্যে গাণিতিক ব্যতিক্রমগুলি অন্তর্ভুক্ত রয়েছে যেমন শূন্য দ্বারা ভাগ করা; পয়েন্টার ব্যতিক্রম যেমন নাল রেফারেন্সের মাধ্যমে কোনও বস্তু অ্যাক্সেস করার চেষ্টা করা; এবং সূচক ব্যতিক্রম যেমন খুব বড় বা খুব ছোট একটি সূচকের মাধ্যমে একটি অ্যারের উপাদান অ্যাক্সেস করার চেষ্টা করা।


5

ওরাকল ডকুমেন্টেশন থেকে:

নীচের লাইনের গাইডলাইনটি এখানে: কোনও ক্লায়েন্ট যদি ব্যতিক্রম থেকে যথাযথভাবে পুনরুদ্ধার আশা করতে পারে তবে এটিকে একটি পরীক্ষিত ব্যতিক্রম করুন। যদি কোনও ক্লায়েন্ট ব্যতিক্রম থেকে পুনরুদ্ধার করতে কিছু করতে না পারে, তবে এটি একটি চেক করা ব্যতিক্রম করুন।

রানটাইম ব্যতিক্রমগুলি এমন সমস্যাগুলির প্রতিনিধিত্ব করে যা কোনও প্রোগ্রামিং সমস্যার ফলস্বরূপ এবং এপিআই ক্লায়েন্ট কোডটি তাদের কাছ থেকে পুনরুদ্ধার করা বা কোনও উপায়ে হ্যান্ডেল করার পক্ষে যুক্তিসঙ্গতভাবে আশা করা যায় না।

রানটাইম এক্সেপশনস যেমন "এপিআইয়ের অবৈধ ব্যবহারের মাধ্যমে ব্যতিক্রম" রানটাইমেক্সেপসের উদাহরণ: ইলিজালস্টেট স্টেপ এক্সেপশন, নেগেটিভআরাই সাইজ এক্সেপশন, নালপয়েন্টার এক্সসেপশন

ব্যতিক্রমগুলির সাথে আপনাকে অবশ্যই এটি স্পষ্টভাবে ধরতে হবে কারণ আপনি এখনও পুনরুদ্ধার করতে কিছু করতে পারেন। ব্যতিক্রমগুলির উদাহরণগুলি: আইওএক্সেপশন, টাইমআউট এক্সেপশন, প্রিন্ট এক্সেপশন ...


4

সহজ কথায়, যদি আপনার ক্লায়েন্ট / ব্যবহারকারী ব্যতিক্রম থেকে পুনরুদ্ধার করতে পারেন তবে এটি একটি চেকড ব্যতিক্রম হিসাবে তৈরি করুন , যদি আপনার ক্লায়েন্ট ব্যতিক্রম থেকে পুনরুদ্ধার করতে কিছু করতে না পারেন তবে এটি চেক না করা রানটাইমএক্সসেপশন করুন । উদাহরণস্বরূপ, একটি রানটাইম এক্সসেপশন একটি প্রোগ্রামেটিক ত্রুটি হবে, শূন্য দ্বারা বিভাজনের মতো, কোনও ব্যবহারকারী এ সম্পর্কে প্রোগ্রামার নিজে ছাড়া কিছুই করতে পারে না, তবে এটি রানটাইম এক্সসেপশন


3

রানটাইম এক্সসেপশন ব্যতিক্রম শ্রেণির একটি শিশু শ্রেণি

এটি ব্যতিক্রম শ্রেণির অনেকগুলি শিশু শ্রেণীর মধ্যে একটি। জাভা ভার্চুয়াল মেশিনের স্বাভাবিক ক্রিয়াকলাপের সময় নিক্ষিপ্ত হওয়া ব্যতিক্রমগুলির রানটাইমএক্সেপশন হ'ল সুপারক্লাস। কোনও পদ্ধতিতে তার থ্রোসে রানটাইমএক্সেপশনের যে কোনও সাবক্লাস রয়েছে তা ঘোষণার প্রয়োজন হয় না যে পদ্ধতিটি কার্যকর করার সময় নিক্ষেপ করা হতে পারে তবে ধরা পড়ে না।

হরিচা হয়

java.lang.Object

--- java.lang.Throwable

------- java.lang.Exception

------------- java.lang.RuntimeException


0

ব্যতিক্রমগুলি আপনার অ্যাপ্লিকেশন প্রবাহে অপ্রত্যাশিত ইভেন্টগুলি পরিচালনা করার একটি ভাল উপায়। রানটাইম এক্সসেপশনটি কম্পাইলার দ্বারা চেক করা হয়নি তবে আপনি আপনার এপিআই ক্লায়েন্টদের আচরণ নিয়ন্ত্রণ করতে ব্যতিক্রম শ্রেণি প্রসারিত ব্যতিক্রমগুলি ব্যবহার করতে পছন্দ করতে পারেন কারণ তাদের সংকলনের জন্য ত্রুটিগুলি ধরা প্রয়োজন। এছাড়াও ভাল ডকুমেন্টেশন ফর্ম।

আপনি যদি ক্লিন ইন্টারফেস অর্জন করতে চান তবে আপনার অ্যাপ্লিকেশনটিতে থাকা বিভিন্ন ধরণের ব্যতিক্রম সাবক্লাসে ব্যবহার করুন এবং তারপরে পিতামাতার ব্যতিক্রমটি প্রকাশ করুন।


0

দুটি ধরণের ব্যতিক্রম রয়েছে, আপনি যদি এই ধরণের ব্যতিক্রম পান তবে আপনি চেক করা ব্যতিক্রম থেকে পুনরুদ্ধার করতে পারেন। রানটাইম ব্যতিক্রম অপরিশোধনযোগ্য, রানটাইম ব্যতিক্রম প্রোগ্রামিং ত্রুটি, এবং প্রোগ্রামার কোডটি লেখার সময় এটির যত্ন নেওয়া উচিত এবং এর কার্যকরকরণ চালিয়ে যাওয়া আপনাকে ভুল ফল দিতে পারে। রানটাইম ব্যতিক্রমগুলি পূর্ব শর্ত লঙ্ঘন সম্পর্কে। আপনার 10 মাপের একটি অ্যারে রয়েছে এবং আপনি 11 তম উপাদানটি অ্যাক্সেস করার চেষ্টা করছেন, এটি অ্যারেআইডেক্স আউটফ্যান্ড বাউন্ডএক্সেপশন নিক্ষেপ করবে


0
  1. ব্যবহারকারী-সংজ্ঞায়িত ব্যতিক্রম পরীক্ষা করা ব্যতিক্রম বা চেক করা ব্যতিক্রম চেক করা যেতে পারে, এটি বর্ধিত শ্রেণীর উপর নির্ভর করে।

  2. ব্যবহারকারী-সংজ্ঞায়িত ব্যতিক্রম কাস্টম চেকড ব্যতিক্রম হতে পারে, যদি এটি ব্যতিক্রম শ্রেণিতে প্রসারিত হয়

  3. ব্যবহারকারী-সংজ্ঞায়িত ব্যতিক্রমটি কাস্টম আনচেকড ব্যতিক্রম হতে পারে, যদি এটি রান টাইম ব্যতিক্রম শ্রেণিতে প্রসারিত হয়।

  4. একটি ক্লাস সংজ্ঞায়িত করুন এবং এটি ব্যতিক্রম বা রান টাইম ব্যতিক্রম একটি শিশু করুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.