Java তে Static এবং Non-static ভেরিয়েবল এর পার্থক্য সম্পর্কে কিছু গুরুত্বপূর্ণ বিষয়:
1. Static Variable (স্ট্যাটিক ভেরিয়েবল):
- Definition: একটি স্ট্যাটিক ভেরিয়েবল এমন একটি ভেরিয়েবল যা ক্লাসের সঙ্গে যুক্ত থাকে, না যে কোনো নির্দিষ্ট অবজেক্টের সঙ্গে। এটি ক্লাস লেভেলে ডিক্লেয়ার করা হয় এবং এই ভেরিয়েবলটি কেবল একবার মেমরিতে লোড হয়, অর্থাৎ, একাধিক অবজেক্ট তৈরি করলেও একটিই ইনস্ট্যান্স থাকে।
- Memory Allocation: স্ট্যাটিক ভেরিয়েবল মেমরিতে একবারই অলোকেট হয় এবং একাধিক অবজেক্টের মধ্যে শেয়ার করা হয়।
- Access: এটি ক্লাসের মাধ্যমে সরাসরি অ্যাক্সেস করা যায়, এবং এর মান সব অবজেক্টের জন্য এক থাকে।
- Usage: সাধারণত, যে ডেটা বা ফাংশনগুলি সব অবজেক্টের জন্য কমন, যেমন কনস্ট্যান্ট ভ্যালু, সে জন্য স্ট্যাটিক ভেরিয়েবল ব্যবহার করা হয়।
- Initialization: স্ট্যাটিক ভেরিয়েবল ক্লাস লোডের সময় ইনিশিয়ালাইজ করা হয়, অর্থাৎ অবজেক্ট তৈরি না করেও এটি অ্যাক্সেস করা সম্ভব।
Example:
class Example {
static int count = 0; // Static variable
Example() {
count++;
}
public static void main(String[] args) {
Example obj1 = new Example();
Example obj2 = new Example();
System.out.println("Count: " + Example.count); // Output: Count: 2
}
}
এখানে, count ভেরিয়েবলটি static, তাই দুইটি অবজেক্ট তৈরি করা সত্ত্বেও এর মান শেয়ার করা হয় এবং একবারেই ইনক্রিমেন্ট হয়।
2. Non-static Variable (নন-স্ট্যাটিক ভেরিয়েবল):
- Definition: একটি নন-স্ট্যাটিক ভেরিয়েবল (ইনস্ট্যান্স ভেরিয়েবল) একটি নির্দিষ্ট অবজেক্টের সাথে যুক্ত থাকে। এটি প্রতিটি অবজেক্টের জন্য আলাদা মেমরি স্থান ধারণ করে। অবজেক্ট তৈরি করার পরেই এর মান ইনিশিয়ালাইজ করা হয়।
- Memory Allocation: নন-স্ট্যাটিক ভেরিয়েবল মেমরিতে অবজেক্ট তৈরি করার সময় আলাদা আলাদা মেমরি স্পেস অলোকেট হয়।
- Access: এটি অবজেক্টের মাধ্যমে অ্যাক্সেস করা হয় এবং এর মান প্রতিটি অবজেক্টের জন্য পৃথক থাকে।
- Usage: যে ডেটা বা ফাংশনগুলি অবজেক্টের জন্য নির্দিষ্ট, তা নন-স্ট্যাটিক ভেরিয়েবল হিসেবে ব্যবহার করা হয়।
- Initialization: নন-স্ট্যাটিক ভেরিয়েবল অবজেক্ট তৈরি করার পর ইনিশিয়ালাইজ হয়।
Example:
class Example {
int count = 0; // Non-static variable
Example() {
count++;
}
public static void main(String[] args) {
Example obj1 = new Example();
Example obj2 = new Example();
System.out.println("Obj1 Count: " + obj1.count); // Output: Obj1 Count: 1
System.out.println("Obj2 Count: " + obj2.count); // Output: Obj2 Count: 1
}
}
এখানে, count ভেরিয়েবলটি নন-স্ট্যাটিক, তাই প্রতিটি অবজেক্টের জন্য এর মান আলাদা।
Static এবং Non-static ভেরিয়েবলের পার্থক্য:
| Criteria | Static Variable | Non-static Variable |
|---|---|---|
| Definition | ক্লাস লেভেলে ডিক্লেয়ার করা হয় এবং সব অবজেক্ট শেয়ার করে। | অবজেক্ট লেভেলে ডিক্লেয়ার করা হয় এবং প্রতিটি অবজেক্টের জন্য আলাদা। |
| Memory Allocation | মেমরিতে একবারই লোড হয় এবং সব অবজেক্টের মধ্যে শেয়ার করা হয়। | প্রতিটি অবজেক্টের জন্য আলাদা মেমরি স্পেস অলোকেট করা হয়। |
| Access | ক্লাসের নাম দিয়ে অ্যাক্সেস করা যায়। | অবজেক্টের মাধ্যমে অ্যাক্সেস করা হয়। |
| Usage | ক্লাসের জন্য কমন ডেটা বা স্ট্যাটিক ফাংশন ব্যবহার করা হয়। | অবজেক্টের জন্য প্রাইভেট ডেটা বা ডাইনামিক ফাংশন ব্যবহার করা হয়। |
| Initialization | ক্লাস লোড হওয়ার সময় ইনিশিয়ালাইজ হয়। | অবজেক্ট তৈরি হওয়ার সময় ইনিশিয়ালাইজ হয়। |
| Default Value | স্ট্যাটিক ভেরিয়েবল যদি ইনিশিয়ালাইজ না করা হয়, তবে এটি ডিফল্ট ভ্যালু পাবে। | নন-স্ট্যাটিক ভেরিয়েবলও যদি ইনিশিয়ালাইজ না করা হয়, তবে এটি ডিফল্ট ভ্যালু পাবে। |
- Static ভেরিয়েবল একাধিক অবজেক্টের মধ্যে শেয়ার করা হয় এবং এটি ক্লাস লেভেল ভেরিয়েবল। এটি মূলত সাধারণ, অপরিবর্তনীয় বা ক্লাস-লেভেল তথ্য ধরে রাখার জন্য ব্যবহার করা হয়।
- Non-static ভেরিয়েবল প্রতিটি অবজেক্টের জন্য আলাদা হয় এবং অবজেক্ট লেভেল ভেরিয়েবল। এটি সাধারণত অবজেক্টের স্বতন্ত্র তথ্য সংরক্ষণ করতে ব্যবহৃত হয়।
Content added By
Read more