Java এ final, static, এবং transient তিনটি গুরুত্বপূর্ণ কীওয়ার্ড রয়েছে, যা ভিন্ন ভিন্ন পরিস্থিতিতে ব্যবহৃত হয়। এগুলির ভূমিকা এবং কাজের বিস্তারিত নিচে দেওয়া হলো:
1. final কীওয়ার্ড
final কীওয়ার্ড Java-এ বিভিন্ন প্রেক্ষাপটে ব্যবহৃত হয়। এটি একটি immutable (অপরিবর্তনশীল) আচরণ নিশ্চিত করতে ব্যবহৃত হয়। final কীওয়ার্ডের মূল ব্যবহারগুলি হল:
ক. final Variable:
যখন একটি ভেরিয়েবল final দিয়ে ডিফাইন করা হয়, তখন তার মান একবার নির্ধারণ করার পর তা পরিবর্তন করা যায় না।
final int x = 10;
x = 20; // Compile-time error: Cannot assign a value to final variable 'x'
- ব্যবহার: এটি কোন ভেরিয়েবলকে কনস্ট্যান্ট হিসাবে ব্যবহার করতে সাহায্য করে, যেমন
PI,MAX_SIZEইত্যাদি।
খ. final Method:
যদি একটি মেথড final দিয়ে ডিফাইন করা হয়, তাহলে সেই মেথডটি ওভাররাইড করা যাবে না।
class Animal {
final void sound() {
System.out.println("Animal sound");
}
}
class Dog extends Animal {
@Override
void sound() { // Compile-time error: Cannot override the final method from Animal
System.out.println("Bark");
}
}
- ব্যবহার: এটি সেই মেথডগুলির জন্য ব্যবহৃত হয় যেগুলিকে কনক্রিট (পরিবর্তনশীল নয়) রাখতে চান, যাতে সেগুলি সাবক্লাসে পরিবর্তিত না হয়।
গ. final Class:
যখন একটি ক্লাস final দিয়ে ডিফাইন করা হয়, তখন সেটি এক্সটেন্ড (ইনহেরিট) করা যায় না।
final class Person {
// class code
}
class Employee extends Person { // Compile-time error: Cannot subclass the final class 'Person'
// class code
}
- ব্যবহার:
finalক্লাসগুলি এমন ক্লাসের জন্য ব্যবহৃত হয় যেগুলি পরিবর্তন বা এক্সটেন্ড হতে চায় না, যেমনStringক্লাস।
2. static কীওয়ার্ড
static কীওয়ার্ড Java-তে এমন মেম্বার ডিফাইন করতে ব্যবহৃত হয় যেগুলি ক্লাসের একক ইনস্ট্যান্সের পরিবর্তে সব ইনস্ট্যান্সের জন্য কমন থাকে। এটি ভেরিয়েবল, মেথড, অথবা ব্লক হতে পারে।
ক. static Variable:
static ভেরিয়েবল সকল অবজেক্টের জন্য শেয়ার করা হয়, এবং এটি ক্লাসের সাথে সম্পর্কিত।
class Counter {
static int count = 0; // static variable
Counter() {
count++;
}
void display() {
System.out.println("Count: " + count);
}
}
public class Main {
public static void main(String[] args) {
Counter c1 = new Counter();
Counter c2 = new Counter();
c1.display(); // Output: Count: 2
c2.display(); // Output: Count: 2
}
}
- ব্যবহার: এটি এমন ক্ষেত্রের জন্য ব্যবহৃত হয় যেখানে একই ভ্যালু সকল অবজেক্টের জন্য শেয়ার করতে চান, যেমন কাউন্টার ভ্যালু।
খ. static Method:
static মেথড ক্লাস লেভেলে থাকে এবং এটি অবজেক্ট তৈরি না করেই কল করা যেতে পারে।
class MathUtil {
static int add(int a, int b) {
return a + b;
}
}
public class Main {
public static void main(String[] args) {
int result = MathUtil.add(5, 3); // Calling static method without creating an object
System.out.println(result); // Output: 8
}
}
- ব্যবহার: এটি ক্লাস লেভেল মেথডের জন্য ব্যবহৃত হয়, যেখানে অবজেক্টের প্রয়োজন নেই। যেমন
main()মেথড।
গ. static Block:
static ব্লক ক্লাস লোড হওয়ার সময় একবারই চলতে থাকে এবং এটি ক্লাসের ইনিশিয়ালাইজেশনের জন্য ব্যবহৃত হয়।
class Example {
static {
System.out.println("Static block is executed");
}
public static void main(String[] args) {
System.out.println("Main method");
}
}
- ব্যবহার: ক্লাস লোড হওয়ার সময় কিছু ইনিশিয়ালাইজেশন কাজ করতে static ব্লক ব্যবহার করা হয়।
3. transient কীওয়ার্ড
transient কীওয়ার্ড Java-তে ব্যবহার করা হয় যখন আপনি কোনও ভেরিয়েবলকে serialization এর সময় সংরক্ষণ করতে না চান। যখন একটি অবজেক্ট serialize করা হয়, তখন সেই অবজেক্টের সব ফিল্ডের মান সংরক্ষণ হয়, কিন্তু transient কীওয়ার্ড ব্যবহার করলে, ঐ ফিল্ডটি সংরক্ষিত হবে না।
import java.io.*;
class Employee implements Serializable {
String name;
transient int age; // 'transient' means 'age' will not be serialized
Employee(String name, int age) {
this.name = name;
this.age = age;
}
}
public class Main {
public static void main(String[] args) throws IOException, ClassNotFoundException {
Employee emp = new Employee("John", 30);
// Serialize the object
FileOutputStream fileOut = new FileOutputStream("employee.ser");
ObjectOutputStream out = new ObjectOutputStream(fileOut);
out.writeObject(emp);
out.close();
fileOut.close();
// Deserialize the object
FileInputStream fileIn = new FileInputStream("employee.ser");
ObjectInputStream in = new ObjectInputStream(fileIn);
Employee deserializedEmp = (Employee) in.readObject();
in.close();
fileIn.close();
System.out.println("Name: " + deserializedEmp.name);
System.out.println("Age: " + deserializedEmp.age); // Age will be default 0 because it's transient
}
}
- ব্যবহার: যখন আপনি অবজেক্ট সেরিয়ালাইজেশন এর সময় কিছু ভেরিয়েবলকে সংরক্ষণ করতে চান না, তখন
transientকীওয়ার্ড ব্যবহার করা হয়। যেমন, সিকিউরিটি ইনফরমেশন, বা অস্থায়ী ডেটা যা সেভ করা উচিত নয়।
সারাংশ:
final:- ভেরিয়েবল, মেথড, বা ক্লাসে ব্যবহৃত হয় যাতে তাদের মান পরিবর্তন বা ওভাররাইড না করা যায়।
static:- ক্লাসের সাথে সম্পর্কিত, অবজেক্টের সাথে নয়, এমন ভেরিয়েবল বা মেথডকে চিহ্নিত করতে ব্যবহৃত হয়। এটি একাধিক অবজেক্ট শেয়ার করতে সাহায্য করে।
transient:- সেরিয়ালাইজেশন প্রক্রিয়ার সময় ভেরিয়েবলকে সংরক্ষিত না করার জন্য ব্যবহৃত হয়।
এগুলো Java এর গুরুত্বপূর্ণ কীওয়ার্ড যা ক্লাস, অবজেক্ট এবং সেরিয়ালাইজেশন প্রক্রিয়ায় বিশেষ ভূমিকা পালন করে।
Read more