স্ট্যাটিক (Class) ভেরিয়েবল ক্লাসের অন্তর্গত থাকে, ইনস্ট্যান্স ভেরিয়েবলের মতো কিন্তু static কীওয়ার্ডসহ। এগুলো কম্পাইল টাইমেই মেমোরিতে লোড হয় এবং অবজেক্ট তৈরি না করেও অ্যাক্সেস করা যায়। পুরো ক্লাসে এর শুধু একটি কপি থাকে।
যদি স্ট্যাটিক ভেরিয়েবল ইনিশিয়ালাইজ না করা থাকে, তবে কম্পাইলার ডিফল্ট কনস্ট্রাক্টরে ডিফল্ট ভ্যালু দিয়ে ইনিশিয়ালাইজ করে (ইনস্ট্যান্স ভেরিয়েবলের মতো)। হ্যাঁ, আপনি কনস্ট্রাক্টর ব্যবহার করে স্ট্যাটিক ভেরিয়েবল ইনিশিয়ালাইজ করতে পারেন।
উদাহরণ: কনস্ট্রাক্টরে স্ট্যাটিক ভেরিয়েবল ইনিশিয়ালাইজেশন
public class DefaultExample {
static String name;
static int age;
DefaultExample() {
name = "Krishna";
age = 25;
}
public static void main(String args[]) {
new DefaultExample(); // অবজেক্ট তৈরি করলে কনস্ট্রাক্টর কল হবে
System.out.println(DefaultExample.name);
System.out.println(DefaultExample.age);
}
}
আউটপুট
Krishna 25
Static এবং Final একসাথে থাকলে কী হয়?
যদি ভেরিয়েবল static final ঘোষিত করা থাকে, তবে কম্পাইলার ডিফল্ট কনস্ট্রাক্টরে সেটি ইনিশিয়ালাইজ করে না। সেটি অবশ্যই ডিক্লেরেশনের সময় বা স্ট্যাটিক ব্লকে ইনিশিয়ালাইজ করতে হবে, অন্যথায় কম্পাইল টাইম এরর হবে।
উদাহরণ: ইনিশিয়ালাইজেশন ছাড়া static final (এরর)
public class DefaultExample {
static final String name;
static final int age;
public static void main(String args[]) {
new DefaultExample();
System.out.println(DefaultExample.name);
System.out.println(DefaultExample.age);
}
}
কম্পাইল টাইম এরর
DefaultExample.java:2: error: variable name not initialized in the default constructor
static final String name;
^
DefaultExample.java:3: error: variable age not initialized in the default constructor
static final int age;
^
2 errors
উদাহরণ: কনস্ট্রাক্টরে static final ইনিশিয়ালাইজ করার চেষ্টা (এরর)
public class DefaultExample {
static final String name;
static final int age;
DefaultExample() {
name = "Krishna"; // এখানেই এরর
age = 25;
}
// ...
}
কম্পাইল টাইম এরর
DefaultExample.java:5: error: cannot assign a value to final variable name
name = "Krishna";
^
DefaultExample.java:6: error: cannot assign a value to final variable age
age = 25;
^
2 errors
সঠিক উপায়: static final ভেরিয়েবল অবশ্যই ডিক্লেরেশনের সময় বা static { } ব্লকে ইনিশিয়ালাইজ করতে হবে।