চেষ্টা করার সময় থ্রোয়েবল এবং ব্যতিক্রম ব্যবহারের মধ্যে পার্থক্য


304

মাঝে মাঝে দেখি

try {

} catch(Throwable e) {

}

এবং কখনও কখনও

try {

} catch(Exception e) {

}

পার্থক্য কি?



উত্তর:


247

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


30
সম্ভবত এখানে শ্রেণিবিন্যাসের কিছুটা ব্যাখ্যা করা ভাল।
জোনাট্রন

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

2
এটিতে থ্রোয়েবলের ব্যবহারকারী-সংজ্ঞায়িত প্রত্যক্ষ উপশ্রেণী এবং নিজেই থ্রোয়েবলের উদাহরণ রয়েছে। আপনাকে লিখতে বাধা দেওয়ার মতো কিছুই নেই throw new Throwable();, তাই সত্যিকার অর্থে সমস্ত কিছু ধরার একমাত্র উপায়।
অ্যান্টিমনি

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

@ ওবেদনিভ "ত্রুটি কী? এটি এতে অন্তর্ভুক্ত করে কেন এটি বিবেচনা করে?" আপনি অন্য একটি প্রশ্ন জিজ্ঞাসা করতে পারেন।
ক্রোনেন

182

প্রথমটি সমস্ত বিভাগের Throwable( এটিতে অন্তর্ভুক্ত Exceptionএবং Error) ক্যাচ করে, দ্বিতীয়টি সমস্ত বিভাগের ক্যাচগুলি ক্যাচ করে Exception

Errorপ্রোগ্রামগতভাবে কোনও উপায়ে অপরিবর্তনযোগ্য এবং লগিংয়ের উদ্দেশ্য ব্যতীত (যা এটি আবার পাস করে) ব্যতীত সাধারণত ধরা পড়েনা। Exceptionপ্রোগ্রামগতভাবে পুনরুদ্ধারযোগ্য। এর সাবক্লাস RuntimeExceptionএকটি প্রোগ্রামিং ত্রুটি নির্দেশ করে এবং সাধারণত এটিও ধরা হয় না।


37
বেশ আশ্চর্যজনকভাবে, এই উত্তরের 4 বছর পরে, বেশিরভাগ "কোড বিশ্লেষণ" সরঞ্জামগুলি এখনও একটি গুরুতর ত্রুটি হিসাবে ধরা ছোঁড়ার রিপোর্ট করবে । থ্রোয়েবল ধরার জন্য লগিং একটি খুব বৈধ কারণ। সার্ভারগুলি বিকাশের বছরগুলি আমাকে বলে যে 1) লগিং একটি Errorএবং 2 পাওয়ার পরেও ঘটবে ) লগইন না করা অবধি আপনাকে কখনই অবহিত করা হবে না যে সার্ভারটি "মজার" আচরণ শুরু করেছে কেন তা ভেবে আপনি অবাক হয়ে যাচ্ছেন
ব্রুনো গ্রিডার

4
programmatically unrecoverableঠিক কি মানে? এটি কি এত মারাত্মক, যে জেভিএমের ফলস্বরূপ কোনও অবিশ্বাস্য আচরণ পাওয়ার সুযোগ ছাড়াই আমরা আর কোনও জাভা পদ্ধতির কাছে এটি আর ধরার পরে (লগিং ইত্যাদি) মূলত কল করতে পারি না?
আলেকজান্ডার আবাকুমভ

Its subclass RuntimeException indicates a programming error: আমি নিশ্চিত নয় যে এই বিবৃতিতে আমি একমত। যদি এটি সত্য হয় তবে এর অর্থ সমস্ত প্রত্যাশিত ব্যতিক্রম ব্যতিক্রমগুলি চেক করা উচিত। যদি আমি প্রত্যাশা করি যে কোনও কিছু ব্যর্থ হতে পারে এবং আমার অ্যাপ্লিকেশনটির দ্বারা অপরিবর্তনযোগ্য তবে আমি কমপক্ষে একটি অর্থবহ ব্যতিক্রম করতে চাই? সেক্ষেত্রে একটি পরীক্ষিত ব্যতিক্রম ব্যবহার করা অকেজো বলে মনে হচ্ছে এবং বয়লারপ্লেট কোড তৈরি করে।
1fan

22

Thowableথ্রেডডিথ এমনকি সত্যিকারের সব কিছুই ধরে ফেলে যা এখন হ্রাস করা Thread.stop()পদ্ধতি থেকে কোনও থ্রেড বন্ধ করতে ডিফল্টরূপে ছুঁড়ে যায় । তাই সংক্রামক দ্বারা Throwableআপনি কি নিশ্চিত যে আপনি অন্তত আপনার ক্যাচ ব্লক মাধ্যমে যাওয়া ছাড়া তৃতীয় বন্ধনীর কখনো ছেড়ে দেব হতে পারে, কিন্তু আপনার কাছে প্রস্তুত করা উচিত হ্যান্ডেল OutOfMemoryErrorএবং InternalErrorবা StackOverflowError

Throwableবাইরের সার্ভার লুপগুলির জন্য ক্যাচিং সর্বাধিক কার্যকর যা সমস্ত ধরণের অনুরোধগুলি বাইরের কোডে প্রেরণ করে তবে সে পরিষেবাটি বেঁচে থাকার জন্য কখনই শেষ হতে পারে না।


21

ThrowableExceptionপাশাপাশি সুপার ক্লাস Error। সাধারণ ক্ষেত্রে আমাদের সর্বদা সাব-ক্লাসগুলি ধরা উচিত Exception, যাতে মূল কারণটি হারাতে না পারে।

কেবলমাত্র বিশেষ ক্ষেত্রে যেখানে আপনার জাভা কোডের নিয়ন্ত্রণে নেই এমন কিছু ভুল হওয়ার সম্ভাবনা দেখা যায়, আপনার ধরা উচিত Errorবা তা করা উচিত Throwable

আমার মনে আছে যে পতাকা নেওয়ার জন্য থ্রোয়েবলকে ধরা হয়েছিল যে কোনও স্থানীয় লাইব্রেরি লোড হয় না।


0

আমি মানুষকে কিছু ত্রুটিগুলি ধরার জন্য থ্রোয়েবল ব্যবহার করতে দেখেছি যা ইনফ্রা ব্যর্থতা / উপলব্ধতার অভাবে ঘটে।

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