কম্পিউটার টিউটোরিয়াল

জাভাতে ডিফল্ট কনস্ট্রাক্টরে স্ট্যাটিক ভেরিয়েবল ইনিশিয়ালাইজ করা যায় কি?

স্ট্যাটিক (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 { } ব্লকে ইনিশিয়ালাইজ করতে হবে।

  1. জাভাতে কনস্ট্রাক্টরকে private ডিক্লেয়ার করা যায় কি?

  2. জাভাতে কনস্ট্রাক্টর কি এক্সেপশন থ্রো করতে পারে?

  3. জাভাতে ইন্টারফেস ভেরিয়েবল ডিফল্টভাবে static এবং final কেন

  4. জাভাতে ব্ল্যাঙ্ক ফাইনাল ভেরিয়েবল ইনিশিয়ালাইজ করা যায় কি