আমরা জাভাতে কীভাবে কাস্টম ব্যতিক্রম তৈরি করব?
আমরা জাভাতে কীভাবে কাস্টম ব্যতিক্রম তৈরি করব?
উত্তর:
একটি চেক করা ব্যতিক্রম সংজ্ঞায়িত করতে আপনি একটি সাবক্লাস তৈরি করেন (বা সাবক্লাসের শ্রেণিবিন্যাস) java.lang.Exception
। উদাহরণ স্বরূপ:
public class FooException extends Exception {
public FooException() { super(); }
public FooException(String message) { super(message); }
public FooException(String message, Throwable cause) { super(message, cause); }
public FooException(Throwable cause) { super(cause); }
}
এই ব্যতিক্রমগুলি সম্ভাব্যভাবে ছোঁড়া বা প্রচার করতে পারে এমন পদ্ধতিগুলি অবশ্যই এটি ঘোষণা করতে হবে:
public void calculate(int i) throws FooException, IOException;
... এবং কোডটিকে এই পদ্ধতিতে কল করার জন্য অবশ্যই এই ব্যতিক্রমটি হ্যান্ডেল করা বা প্রচার করা উচিত (বা উভয়):
try {
int i = 5;
myObject.calculate(5);
} catch(FooException ex) {
// Print error and terminate application.
ex.printStackTrace();
System.exit(1);
} catch(IOException ex) {
// Rethrow as FooException.
throw new FooException(ex);
}
আপনি উপরোক্ত উদাহরণে লক্ষ্য করবেন IOException
যা ধরা পড়ে এবং পুনরায় উত্থিত হয় FooException
। এটি একটি সাধারণ কৌশল যা ব্যতিক্রমগুলি encapsulate করতে ব্যবহৃত হয় (সাধারণত কোনও এপিআই প্রয়োগ করার সময়)।
কখনও কখনও এমন পরিস্থিতি তৈরি হয় যেখানে আপনি প্রতিটি পদ্ধতিটিকে তার আপত্তি প্রয়োগের ঘোষণা দিতে বাধ্য করতে চান না rows এই ক্ষেত্রে আপনি একটি তৈরি করতে পারেন অবারিত ব্যতিক্রম। একটি চেক না করা ব্যতিক্রম হ'ল যে ব্যতিক্রমগুলি প্রসারিত java.lang.RuntimeException
(যা নিজেই এটির একটি সাবক্লাস java.lang.Exception
):
public class FooRuntimeException extends RuntimeException {
...
}
পদ্ধতিগুলি FooRuntimeException
এটি ঘোষণা না করে ব্যতিক্রম ছোঁড়া বা প্রচার করতে পারে; যেমন
public void calculate(int i) {
if (i < 0) {
throw new FooRuntimeException("i < 0: " + i);
}
}
চেক করা ব্যতিক্রমগুলি সাধারণত একটি প্রোগ্রামার ত্রুটি বোঝাতে ব্যবহৃত হয়, উদাহরণস্বরূপ কোনও পদ্ধতিতে একটি অবৈধ যুক্তি পাস করা বা অ্যারে সূচক সীমানাকে লঙ্ঘন করার চেষ্টা করা।
java.lang.Throwable
বর্গ সব ত্রুটি এবং ব্যতিক্রম যে জাভা মধ্যে নিক্ষিপ্ত হতে পারে মূল। java.lang.Exception
এবং java.lang.Error
উভয়ই এর সাবক্লাস Throwable
। উপশ্রেণী যে কোনও কিছু Throwable
নিক্ষেপ বা ধরা পড়তে পারে। তবে এটি ধরা বা নিক্ষেপ Error
করা সাধারণত খারাপ অভ্যাস কারণ এটি JVM- র অভ্যন্তরীণ ত্রুটিগুলি বোঝাতে ব্যবহৃত হয় যা সাধারণত প্রোগ্রামার দ্বারা (যেমন OutOfMemoryError
) পরিচালনা করা যায় না। তেমনি আপনার ধরাও এড়ানো উচিত Throwable
, এর ফলে আপনি Error
এস ছাড়াও এস ধরতে পারেন Exception
।
একটি পরীক্ষিত ব্যতিক্রম:
public class MyCustomException extends Exception { }
প্রযুক্তিগতভাবে, প্রসারিত যে কোনও কিছুই নিক্ষেপযোগ্য Throwable
হতে পারে তবে ব্যতিক্রমগুলি সাধারণত Exception
শ্রেণীর এক্সটেনশন হয় যাতে তারা ব্যতিক্রমগুলি পরীক্ষা করে নেওয়া হয় (রানটাইম এক্সেকশন বা এর উপর ভিত্তি করে ক্লাসগুলি যাচাই করা হয় না) অন্য সাধারণ ধরণের নিক্ষেপযোগ্য বিপরীতে, Error
গুলি যা সাধারণত জেভিএম ইন্টার্নালগুলি ছাড়িয়ে নিখুঁতভাবে পরিচালনার জন্য ডিজাইন করা কিছু নয়।
আপনি ব্যতিক্রমগুলি অ-সর্বজনীনও করতে পারেন, তবে তারপরে আপনি কেবল সেগুলি প্যাকেজে ব্যবহার করতে পারেন যা তাদের সংজ্ঞা দেয়, প্যাকেজগুলির বিপরীতে।
যতক্ষণ না কাস্টম ব্যতিক্রম ছোঁড়া / ধরা, এটি বিল্ট-ইনগুলির মতোই কাজ করে - এর মাধ্যমে ফেলে দিন
throw new MyCustomException()
এবং মাধ্যমে ধরা
catch (MyCustomException e) { }
Throwable
যেতে পারে ; ব্যতিক্রম প্রসারিত । থ্রোয়েবলের একটি কাস্টম সাবক্লাস কোনও ব্লক ধরা পড়বে না । Exception
try { ... } catch (Exception e) { ... }
Error
এটি ব্যতিক্রম নয়, এটি একটি ত্রুটি)। 3) এটি সূচিত করে যে ব্যতিক্রমগুলির যে কোনও সাবক্লাস পরীক্ষা করা হয় যখন রানটাইম এক্সেকশন হয় না। অ্যাডামস্কির দেওয়া উত্তরটি আরও অনেক নির্ভুল!