একটি স্ট্যাটিক ব্লক হলো স্টেটমেন্টের একটি সেট, যা JVM দ্বারা main() মেথড এক্সিকিউশনের আগে এক্সিকিউট করা হয়। ক্লাস লোডিংয়ের সময় যদি আমরা কোনো এক্টিভিটি পারফর্ম করতে চাই, তবে সেটি অবশ্যই একটি স্ট্যাটিক ব্লক-এ ডিফাইন করতে হবে কারণ এই ব্লক ক্লাস লোডিংয়ের সময় এক্সিকিউট হয়।
স্ট্যাটিক ব্লক থেকে এক্সেপশন থ্রো করা
- একটি স্ট্যাটিক ব্লক শুধু RuntimeException থ্রো করতে পারে, অথবা চেকড এক্সেপশন ক্যাচ করার জন্য try-catch ব্লক থাকতে হবে।
- এক স্ট্যাটিক ব্লক ঘটে যখন একটি ক্লাস ক্লাস লোডার দ্বারা লোড হয়। কোডটি হয় স্ট্যাটিক ব্লক-এর রূপে আসে বা স্ট্যাটিক ডেটা মেম্বার ইনিশিয়ালাইজ করার জন্য একটি স্ট্যাটিক মেথড কল হিসেবে।
- দুই কেসেই, কম্পাইলার দ্বারা চেকড এক্সেপশন ألোড করা হয় না। যখন একটি আনচেকড এক্সেপশন ঘটে, এটি ExceptionInInitializerError দ্বারা র্যাপ হয়ে যায়, যা след(cls লোডিং ট্রিগার করার থ্রেডের কনটেক্স্টে থ্রো হয়।
- স্ট্যাটিক ব্লক থেকে চেকড এক্সেপশন থ্রো করার চেষ্টা করলেও কম্পাইলার ألো করে না। আমরা একটি স্ট্যাটিক ব্লকে try-catch ব্লক রাখতে পারি যেখানে try ব্লক থেকে চেকড এক্সেপশন থ্রো হতে পারে কিন্তু ক্যাচ ব্লকে সেটি রেজলভ করতে হবে। আমরা throw কিওয়ার্ড ব্যবহার করে এটিকে আরও প্রসারিত করতে পারি না।
উদাহরণ
public class StaticBlockException {
static int i, j;
static {
System.out.println("In the static block");
try {
i = 0;
j = 10/i;
} catch(Exception e){
System.out.println("Exception while initializing" + e.getMessage());
throw new RuntimeException(e.getMessage());
}
}
public static void main(String args[]) {
StaticBlockException sbe = new StaticBlockException();
System.out.println("In the main() method");
System.out.println("Value of i is : "+i);
System.out.println("Value of j is : "+ j);
}
}
আউটপুট
In the static block
Exception while initializing/ by zero
Exception in thread "main" java.lang.ExceptionInInitializerError
Caused by: java.lang.RuntimeException: / by zero
at StaticBlockException.(StaticBlockException.java:10)