"আমি আজকে আরও একটি বিষয়ে কথা বলতে চেয়েছিলাম। জাভাতে, সমস্ত ব্যতিক্রম দুটি প্রকারে বিভক্ত: চেক করা এবং আনচেক করা (যেগুলি অবশ্যই ধরা হবে এবং যেগুলি আপনাকে ধরতে হবে না)। ডিফল্টরূপে, সমস্ত ব্যতিক্রম হওয়া প্রয়োজন । ধরা।"
"আপনি কি ইচ্ছাকৃতভাবে আপনার কোডে ব্যতিক্রম নিক্ষেপ করতে পারেন?"
"আপনি আপনার নিজের কোডে যেকোনো ব্যতিক্রম ছুঁড়ে দিতে পারেন। এমনকি আপনি নিজের ব্যতিক্রমও লিখতে পারেন। কিন্তু আমরা সে বিষয়ে পরে কথা বলব। এই মুহূর্তে, জাভা মেশিনের দ্বারা নিক্ষিপ্ত ব্যতিক্রমগুলিতে মনোনিবেশ করা যাক।"
"ঠিক আছে."
"যদি ClassNotFoundException বা FileNotFoundException একটি পদ্ধতিতে নিক্ষিপ্ত (ঘটতে) হয়, তবে বিকাশকারীকে অবশ্যই পদ্ধতি ঘোষণায় সেগুলি নির্দেশ করতে হবে। এগুলি চেক করা ব্যতিক্রম। এটি সাধারণত এভাবে দেখায়:"
চেক করা ব্যতিক্রমের উদাহরণ |
---|
|
|
|
"সুতরাং আমরা শুধু 'থ্রো' লিখি তার পরে ব্যতিক্রমগুলির একটি কমা-বিন্যস্ত তালিকা, তাই না?"
"হ্যাঁ। তবে আরও কিছু আছে। প্রোগ্রামটি কম্পাইল করার জন্য, method1
নীচের উদাহরণে যে পদ্ধতিটি কল করা হয়েছে তাকে অবশ্যই দুটি জিনিসের মধ্যে একটি করতে হবে: হয় এই ব্যতিক্রমগুলি ধরুন বা সেগুলিকে (কলারের কাছে) পুনঃ থ্রো করুন , এটির ঘোষণায় পুনরায় নিক্ষেপ করা ব্যতিক্রমগুলি নির্দেশ করে। "
"আবার। যদি আপনার প্রধান পদ্ধতিতে এমন একটি পদ্ধতি কল করতে হয় যার ঘোষণায় ' থ্রোস ফাইলনটফাউন্ডএক্সেপশন , …' থাকে, তাহলে আপনাকে দুটি জিনিসের মধ্যে একটি করতে হবে:
1) FileNotFoundException ধরুন , …
আপনাকে অবশ্যই একটি ট্রাই-ক্যাচ ব্লকে অনিরাপদ পদ্ধতিতে কল করার কোডটি আবৃত করতে হবে ।
2) FileNotFoundException ধরবেন না , …
আপনাকে অবশ্যই আপনার প্রধান পদ্ধতির নিক্ষেপ তালিকায় এই ব্যতিক্রমগুলি যোগ করতে হবে ।"
"আপনি আমাকে একটি উদাহরণ দিতে পারেন?"
"এক নজর দেখে নাও:"
public static void main(String[] args)
{
method1();
}
public static void method1() throws FileNotFoundException, ClassNotFoundException
{
//Throws FileNotFoundException if the file doesn't exist
FileInputStream fis = new FileInputStream("C2:\badFileName.txt");
}
"এই উদাহরণের কোডটি কম্পাইল করা হবে না, কারণ প্রধান পদ্ধতিটি মেথড1() কে কল করে , যা ব্যতিক্রমগুলিকে ছুঁড়ে দেয় যা ধরতে হবে।"
"এটি কম্পাইল করতে, আমাদের মূল পদ্ধতিতে ব্যতিক্রম হ্যান্ডলিং যোগ করতে হবে। আপনি এটি দুটি উপায়ের একটিতে করতে পারেন:"
public static void main(String[] args) throws FileNotFoundException, ClassNotFoundException
{
method1();
}
public static void method1() throws FileNotFoundException, ClassNotFoundException
{
//Throws FileNotFoundException if the file doesn't exist
FileInputStream fis = new FileInputStream("C2:\badFileName.txt");
}
"এবং এখানে আমরা এটি একটি চেষ্টা-ক্যাচ দিয়ে ধরি :"
public static void main(String[] args)
{
try
{
method1();
}
catch(Exception e)
{
}
}
public static void method1() throws FileNotFoundException, ClassNotFoundException
{
//Throws FileNotFoundException if the file doesn't exist
FileInputStream fis = new FileInputStream("C2:\badFileName.txt");
}
"এটা আরও পরিষ্কার হতে শুরু করেছে।"
"নিম্নলিখিত উদাহরণটি দেখুন। এটি আপনাকে বাকিটা বুঝতে সাহায্য করবে।"
public static void method2() throws FileNotFoundException, ClassNotFoundException
{
method1();
}
public static void method3() throws ClassNotFoundException
{
try
{
method1();
}
catch (FileNotFoundException e)
{
System.out.println("FileNotFoundException has been caught.");
}
}
public static void method4()
{
try
{
method1();
}
catch (FileNotFoundException e)
{
System.out.println("FileNotFoundException has been caught.");
}
catch (ClassNotFoundException e)
{
System.out.println("ClassNotFoundException has been caught.");
}
}
"আরো এক ধরনের ব্যতিক্রম আছে, RuntimeException এবং ক্লাস যা এটিকে উত্তরাধিকারী করে। আপনাকে তাদের ধরতে হবে না। এগুলি অচেক করা ব্যতিক্রম। এগুলি ভবিষ্যদ্বাণী করা কঠিন বলে মনে করা হয়। আপনি তাদের সাথে একইভাবে মোকাবেলা করতে পারেন, কিন্তু আপনি থ্রো ক্লজে সেগুলি নির্দেশ করার দরকার নেই ।"
GO TO FULL VERSION