C++ এবং Java-তে static কীওয়ার্ড আছে, কিন্তু কিছু মৌলিক পার্থক্য রয়েছে।
স্ট্যাটিক ডেটা মেম্বার (সাদৃশ্য)
দুভাষাতেই স্ট্যাটিক মেম্বার ক্লাসের প্রোপার্টি, সব অবজেক্টের बीच শেয়ার্ড।
Java
public class Test {
static int ob_count = 0;
Test() { ob_count++; }
public static void main(String[] args) {
new Test(); new Test();
System.out.println("Objects: " + ob_count); // 2
}
}
C++
#include <iostream>
using namespace std;
class Test {
public:
static int ob_count;
Test() { ob_count++; }
};
int Test::ob_count = 0; // ডেফিনিশন বাইরে দরকার
int main() {
Test o1, o2;
cout << "Objects: " << Test::ob_count; // 2
return 0;
}
স্ট্যাটিক মেম্বার ফাংশন (সাদৃশ্য)
দুভাষায়ই: শুধু স্ট্যাটিক মেম্বার অ্যাক্সেস করতে পারে, this নেই।
পার্থক্য
| বিষয় | C++ | Java |
|---|---|---|
| স্ট্যাটিক ব্লক | নেই | হেয় (static { ... }) - ক্লাস লোডিং-এ একবার রান হয় |
| স্ট্যাটিক লোকাল ভেরিয়েবল | সাপোর্ট করে (ফাংশন-লেভেল) | সাপোর্ট করে না |
| স্ট্যাটিক মেম্বার ডেফিনিশন | ক্লাসের বাইরে আলাদা ডেফিনিশন লাগে | ক্লাসের ভেতরেই ইনিশিয়ালাইজেশন সম্ভব |
Java Static Block উদাহরণ
public class MyClass {
static int x = 10;
static { x += 5; } // স্ট্যাটিক ব্লক
static void print() { System.out.println(x); }
}
public class Test {
public static void main(String[] args) { MyClass.print(); } // 15
}
সারসংক্ষেপ: C++-এ স্ট্যাটিক লোকাল ভেরিয়েবল ও মেম্বার ডেফিনিশন বাইরে দিতে হয়। জাভায় স্ট্যাটিক ব্লক আছে, কিন্তু স্ট্যাটিক লোকাল নেই।