জাভাতে, exceptions
ব্যতিক্রম পৃথকভাবে ধরার পরিবর্তে সমস্ত কি (ক্যাচ) পাওয়ার কী উপায় আছে ?
জাভাতে, exceptions
ব্যতিক্রম পৃথকভাবে ধরার পরিবর্তে সমস্ত কি (ক্যাচ) পাওয়ার কী উপায় আছে ?
উত্তর:
আপনি যদি চান তবে আপনার পদ্ধতিগুলিতে থ্রো ক্লজ যুক্ত করতে পারেন। তারপরে আপনাকে এখনই পরীক্ষিত পদ্ধতিগুলি ধরতে হবে না। এইভাবে, আপনি exceptions
পরে (সম্ভবত অন্যান্য হিসাবে একই সময়ে exceptions
) ধরতে পারেন ।
কোডটি দেখে মনে হচ্ছে:
public void someMethode() throws SomeCheckedException {
// code
}
তারপরে আপনি exceptions
যদি সেই পদ্ধতিতে তাদের সাথে ডিল করতে না চান তবে আপনি তার সাথে ডিল করতে পারেন ।
সমস্ত ব্যতিক্রম ধরতে কোডের কিছু ব্লক আপনি করতে পারেন: (এটি আপনাকে Exceptions
নিজের লেখা বলেও ধরা দেবে )
try {
// exceptional block of code ...
// ...
} catch (Exception e){
// Deal with e as you please.
//e may be any type of exception at all.
}
যে কারণে কাজ করে তা Exception
হ'ল সমস্ত ব্যতিক্রমের জন্য বেস শ্রেণি। সুতরাং নিক্ষিপ্ত হতে পারে যে কোনও ব্যতিক্রম হ'ল Exception
(বড় হাতের 'ই')।
আপনি যদি নিজের ব্যতিক্রমগুলি পরিচালনা করতে চান তবে প্রথমে catch
সাধারণ ব্যতিক্রমের আগে একটি ব্লক যুক্ত করুন ।
try{
}catch(MyOwnException me){
}catch(Exception e){
}
যদিও আমি একমত যে কোনও কাঁচা ব্যতিক্রম ধরা ভাল স্টাইল নয়, তবে ব্যতিক্রমগুলি পরিচালনা করার বিভিন্ন উপায় রয়েছে যা উচ্চতর লগিং সরবরাহ করে এবং অপ্রত্যাশিতভাবে সামলানোর ক্ষমতা। যেহেতু আপনি একটি ব্যতিক্রমী অবস্থায় রয়েছেন, প্রতিক্রিয়া সময়ের চেয়ে আপনি সম্ভবত ভাল তথ্য পেতে আগ্রহী, সুতরাং উদাহরণস্বরূপ পারফরম্যান্সটি বড় হিট হওয়া উচিত নয়।
try{
// IO code
} catch (Exception e){
if(e instanceof IOException){
// handle this exception type
} else if (e instanceof AnotherExceptionType){
//handle this one
} else {
// We didn't expect this one. What could it be? Let's log it, and let it bubble up the hierarchy.
throw e;
}
}
যাইহোক, এটি আইও ত্রুটিগুলিও ফেলে দিতে পারে এ বিষয়টি বিবেচনায় নেই। ত্রুটিগুলি ব্যতিক্রম নয়। ত্রুটিগুলি ব্যতিক্রমগুলির চেয়ে আলাদা উত্তরাধিকারের শ্রেণিবদ্ধের অধীনে, যদিও উভয়ই বেস শ্রেণিটি থ্রোয়েবল ভাগ করে। যেহেতু আইও ত্রুটিগুলি ফেলে দিতে পারে, তাই আপনি থ্রোয়েবলকে ধরার জন্য এতদূর যেতে চাইতে পারেন
try{
// IO code
} catch (Throwable t){
if(t instanceof Exception){
if(t instanceof IOException){
// handle this exception type
} else if (t instanceof AnotherExceptionType){
//handle this one
} else {
// We didn't expect this Exception. What could it be? Let's log it, and let it bubble up the hierarchy.
}
} else if (t instanceof Error){
if(t instanceof IOError){
// handle this Error
} else if (t instanceof AnotherError){
//handle different Error
} else {
// We didn't expect this Error. What could it be? Let's log it, and let it bubble up the hierarchy.
}
} else {
// This should never be reached, unless you have subclassed Throwable for your own purposes.
throw t;
}
}
বেস ব্যতিক্রম 'ব্যতিক্রম' ধরুন
try {
//some code
} catch (Exception e) {
//catches exception and all subclasses
}
এক্সেপশন ধরতে এটি খারাপ অনুশীলন - এটি কেবল খুব বিস্তৃত এবং আপনি নিজের কোডে নুলপয়েন্টার এক্সসেপশন এর মতো কিছু মিস করতে পারেন ।
বেশিরভাগ ফাইল অপারেশনের জন্য, আইওএক্সেপশন হ'ল মূল ব্যতিক্রম। তার পরিবর্তে, এটি ধরা ভাল।
হ্যা এখানে.
try
{
//Read/write file
}catch(Exception ex)
{
//catches all exceptions extended from Exception (which is everything)
}
আপনি একক ক্যাচ ব্লকে একাধিক ব্যতিক্রম ধরতে পারেন।
try{
// somecode throwing multiple exceptions;
} catch (Exception1 | Exception2 | Exception3 exception){
// handle exception.
}
আপনি কি নির্দিষ্ট ধরণের ব্যতিক্রমগুলির বিপরীতে নিক্ষেপ করা Exception
কোনও ধরণের ধরণটি বোঝাতে চান ?
যদি তাই:
try {
//...file IO...
} catch(Exception e) {
//...do stuff with e, such as check its type or log it...
}