হ্যাঁ, জাভাতে কনস্ট্রাক্টর এক্সেপশন থ্রো করতে পারে।
একটি কনস্ট্রাক্টর হলো একটি বিশেষ ধরনের মেথড যা অবজেক্ট ইনিশিয়ালাইজ করার জন্য ব্যবহৃত হয় এবং new keyword ব্যবহার করে একটি ক্লাসের অবজেক্ট তৈরি করতে ব্যবহৃত হয়, যেখানে একটি অবজেক্টকে ইনস্ট্যান্সও বলা হয়। একটি ক্লাসের প্রতিটি অবজেক্টের নিজস্ব স্টেট (ইনস্ট্যান্স ভেরিয়েবল) থাকে এবং তার ক্লাসের মেথডগুলোর অ্যাক্সেস থাকে।
কনস্ট্রাক্টর থেকে এক্সেপশন থ্রো করা
- একটি চেকড এক্সেপশন ব্যবহার করা যেতে পারে একটি লেজিটিমেট প্রোব্লেম ইন্ডিকেট করার জন্য যখন ইনস্ট্যান্স তৈরি করার চেষ্টা করা হয়, যেখানে একটি আনচেকড এক্সেপশন সাধারণত ক্লায়েন্ট কোড বা কনস্ট্রাক্টর নিজে একটি বাগ ইন্ডিকেট করে।
- দুই কেসেই, একটি অবজেক্ট আসলে হিপ স্পেসে alokেট হয়, কিন্তু এর রেফারেন্স রিটার্ন করা হয় না। অবজেক্টটি আংশিকভাবে ইনিশিয়ালাইজড স্টেটে থাকে যতক্ষণ না গার্বেজ কলেক্ট হয়। সুতরাং কনস্ট্রাক্টর থেকে নিজে অবজেক্টের রেফারেন্স সেভ করা (this রেফারেন্স ব্যবহার করে) রিস্কি, কারণ আমরা একটি ইনভ্যালিড স্টেটের অবজেক্টে অ্যাক্সেস দিতে পারি।
- রিফ্লেকশন-এর সাথে সম্পর্কিত এক্সেপশন সম্পর্কে আরেকটি গুরুত্বপূর্ণ বিষয়। যখন আমরা খালি কনস্ট্রাক্টর ইনভোক করতে চাই ক্লাস অবজেক্ট ব্যবহার করে (উদাহরণস্বরূপ test), আমরা কখনো কখনো test.newInstance() মেথড ব্যবহার করি।
- কনস্ট্রাক্টর দ্বারা থ্রো করা যেকোনো এক্সেপশন পরিবর্তন ছাড়া প্রপাগেট হয়। অন্য কথায়, newInstance() মেথড চেকড এক্সেপশন থ্রো করতে পারে যা সেটি ডিক্লেয়ার করতেও পারে না।
উদাহরণ
public class ConstructorExceptionTest {
public ConstructorExceptionTest() throws InterruptedException {
System.out.println("Preparing an Object");
Thread.sleep(1000);
System.out.println("Object is ready");
}
public static void main(String args[]) {
try {
ConstructorExceptionTest test = new ConstructorExceptionTest();
} catch (InterruptedException e) {
System.out.println("Got interrupted...");
}
}
}
আউটপুট
Preparing an Object Object is ready