মাঝে মাঝে দেখি
try {
} catch(Throwable e) {
}
এবং কখনও কখনও
try {
} catch(Exception e) {
}
পার্থক্য কি?
মাঝে মাঝে দেখি
try {
} catch(Throwable e) {
}
এবং কখনও কখনও
try {
} catch(Exception e) {
}
পার্থক্য কি?
উত্তর:
Throwable
এটি ধরা দ্বারা সাবক্লাসযুক্ত জিনিসগুলি অন্তর্ভুক্ত Error
। আপনি সাধারণত এমনটি করা উচিত নয়, সম্ভবত আপনি যে থ্রেডে লগইন করতে চান বা অন্যথায় ভুল হতে পারে এমন সমস্ত কিছুই হ্যান্ডেল করতে চান এমন সর্বোচ্চ স্তরের "সমস্তই ধরুন" ব্যতীত should এটা একটা ফ্রেমওয়ার্ক টাইপ অ্যাপ্লিকেশন (উদাহরণস্বরূপ একটি অ্যাপ্লিকেশন সার্ভার বা কোন পরীক্ষা ফ্রেমওয়ার্ক) যেখানে এটা অজানা কোড চালনাকারী হবে এবং করতে পারেন দ্বারা প্রভাবিত করা উচিত নয় আরও টিপিক্যাল হবে কিছু যে কোড দিয়ে ভুল হয়ে থাকে, যতটা সম্ভব।
throw new Throwable();
, তাই সত্যিকার অর্থে সমস্ত কিছু ধরার একমাত্র উপায়।
প্রথমটি সমস্ত বিভাগের Throwable
( এটিতে অন্তর্ভুক্ত Exception
এবং Error
) ক্যাচ করে, দ্বিতীয়টি সমস্ত বিভাগের ক্যাচগুলি ক্যাচ করে Exception
।
Error
প্রোগ্রামগতভাবে কোনও উপায়ে অপরিবর্তনযোগ্য এবং লগিংয়ের উদ্দেশ্য ব্যতীত (যা এটি আবার পাস করে) ব্যতীত সাধারণত ধরা পড়েনা। Exception
প্রোগ্রামগতভাবে পুনরুদ্ধারযোগ্য। এর সাবক্লাস RuntimeException
একটি প্রোগ্রামিং ত্রুটি নির্দেশ করে এবং সাধারণত এটিও ধরা হয় না।
Error
এবং 2 পাওয়ার পরেও ঘটবে ) লগইন না করা অবধি আপনাকে কখনই অবহিত করা হবে না যে সার্ভারটি "মজার" আচরণ শুরু করেছে কেন তা ভেবে আপনি অবাক হয়ে যাচ্ছেন
programmatically unrecoverable
ঠিক কি মানে? এটি কি এত মারাত্মক, যে জেভিএমের ফলস্বরূপ কোনও অবিশ্বাস্য আচরণ পাওয়ার সুযোগ ছাড়াই আমরা আর কোনও জাভা পদ্ধতির কাছে এটি আর ধরার পরে (লগিং ইত্যাদি) মূলত কল করতে পারি না?
Its subclass RuntimeException indicates a programming error
: আমি নিশ্চিত নয় যে এই বিবৃতিতে আমি একমত। যদি এটি সত্য হয় তবে এর অর্থ সমস্ত প্রত্যাশিত ব্যতিক্রম ব্যতিক্রমগুলি চেক করা উচিত। যদি আমি প্রত্যাশা করি যে কোনও কিছু ব্যর্থ হতে পারে এবং আমার অ্যাপ্লিকেশনটির দ্বারা অপরিবর্তনযোগ্য তবে আমি কমপক্ষে একটি অর্থবহ ব্যতিক্রম করতে চাই? সেক্ষেত্রে একটি পরীক্ষিত ব্যতিক্রম ব্যবহার করা অকেজো বলে মনে হচ্ছে এবং বয়লারপ্লেট কোড তৈরি করে।
Thowable
থ্রেডডিথ এমনকি সত্যিকারের সব কিছুই ধরে ফেলে যা এখন হ্রাস করা Thread.stop()
পদ্ধতি থেকে কোনও থ্রেড বন্ধ করতে ডিফল্টরূপে ছুঁড়ে যায় । তাই সংক্রামক দ্বারা Throwable
আপনি কি নিশ্চিত যে আপনি অন্তত আপনার ক্যাচ ব্লক মাধ্যমে যাওয়া ছাড়া তৃতীয় বন্ধনীর কখনো ছেড়ে দেব হতে পারে, কিন্তু আপনার কাছে প্রস্তুত করা উচিত হ্যান্ডেল OutOfMemoryError
এবং InternalError
বা StackOverflowError
।
Throwable
বাইরের সার্ভার লুপগুলির জন্য ক্যাচিং সর্বাধিক কার্যকর যা সমস্ত ধরণের অনুরোধগুলি বাইরের কোডে প্রেরণ করে তবে সে পরিষেবাটি বেঁচে থাকার জন্য কখনই শেষ হতে পারে না।
Throwable
Exception
পাশাপাশি সুপার ক্লাস Error
। সাধারণ ক্ষেত্রে আমাদের সর্বদা সাব-ক্লাসগুলি ধরা উচিত Exception
, যাতে মূল কারণটি হারাতে না পারে।
কেবলমাত্র বিশেষ ক্ষেত্রে যেখানে আপনার জাভা কোডের নিয়ন্ত্রণে নেই এমন কিছু ভুল হওয়ার সম্ভাবনা দেখা যায়, আপনার ধরা উচিত Error
বা তা করা উচিত Throwable
।
আমার মনে আছে যে পতাকা নেওয়ার জন্য থ্রোয়েবলকে ধরা হয়েছিল যে কোনও স্থানীয় লাইব্রেরি লোড হয় না।