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

জাভা Static কিওয়ার্ড: সম্পূর্ণ গাইড

জাভা Static কিওয়ার্ড কীভাবে ব্যবহার করবেন

জাভা-তে ক্লাস নিয়ে কাজ করার সময়, আপনি সাধারণত ক্লাসের একটি ইনস্ট্যান্স তৈরি করার আগে তার মেম্বাররা অ্যাক্সেস করতে পারবেন না। যাইহোক, আপনি এমন একটি পরিস্থিতি সম্মুখীন হতে পারেন যেখানে আপনি একটি ক্লাসের ইনস্ট্যান্স তৈরি না করেই একটি ক্লাস মেম্বার ডিফাইন করতে চান।

সেটিই জাভা static কিওয়ার্ড কাজে লাগে। জাভা static কিওয়ার্ড ক্লাস মেম্বার ডিফাইন করতে ব্যবহৃত হয় যেগুলো আপনি একটি ক্লাসের ইনস্ট্যান্স তৈরি না করেই অ্যাক্সেস করতে পারেন।

এই টিউটোরিয়াল উদাহরণসহ জাভা static কিওয়ার্ডের বেসিকস এবং আপনার জাভা প্রোগ্রামে কীভাবে এটি ব্যবহার করবেন তা আলোচনা করবে।

জাভা ক্লাস

জাভা-তে, ক্লাসগুলো একটি অবজেক্টের জন্য ব্লুপ্রিন্ট। উদাহরণস্বরূপ, একটি OrderCoffee ক্লাস কফি অর্ডার করার সাথে জড়িত সব ফাংশন ধারণ করতে পারে, যেমন অর্ডার প্লেস করা, একটি বিদ্যমান অর্ডার পরিবর্তন করা, এবং একটি অর্ডারে নতুন আইটেম যোগ করা।

আমরা সেটি থেকে অবজেক্ট তৈরি করতে পারি যেগুলো সেই ক্লাসের ইনস্ট্যান্স। উদাহরণস্বরূপ, একটি CoffeeOrder12 অবজেক্ট CoffeeOrder ক্লাসের ব্লুপ্রিন্ট ব্যবহার করে একটি ইনডিভিজুয়াল কফি অর্ডারের ডেটা সংরক্ষণ করতে পারে। CoffeeOrder12 অবজেক্টের অ্যাক্সেস থাকবে CoffeeOrder ক্লাসে ঘোষণা করা সব ফাংশন এবং মেথডে।

এখন যেহেতু আমরা জাভা ক্লাসের বেসিকস আলোচনা করেছি, আমরা জাভা static কিওয়ার্ড এক্সপ্লোর করতে পারি।

জাভা Static মেথড

স্ট্যাটিক মেথড, যাকে ক্লাস মেথডও বলা হয়, হলো সেই মেথডগুলো যা একটি ক্লাসের অংশ, তার ইনস্ট্যান্সগুলো না। যেহেতু স্ট্যাটিক মেথডগুলো একটি ক্লাসের অংশ, আপনি সেগুলো শুধু ক্লাসটি থেকে ইনভোক করতে পারেন, ক্লাসের কোনো অবজেক্ট থেকে নয়।

স্ট্যাটিক মেথড ইনভোক করার সিনট্যাক্স:

Class.methodName();

এটি কীভাবে কাজ করে সেটি দেখতে একটি উদাহরণ দেখি।

ধরুন, আমরা একটি কফি স্টোরের অর্ডার ম্যানেজ করার একটি প্রোগ্রাম তৈরি করছি। আমরা CoffeeOrder নামে একটি ক্লাস তৈরি করতে চাই যা কফি অর্ডার করার সব ফাংশন সংরক্ষণ করবে।

আমরা সিদ্ধান্ত নিলাম আমরা বারিস্টার কনসোলে নতুন অর্ডার নোটিফিকেশন প্রিন্ট করতে পারব। আমরা এই নতুন অর্ডার নোটিফিকেশনকে স্ট্যাটিক করতে চাই কারণ এটি কফি অর্ডার অবজেক্টের অন্য কোনো কোডের ওপর নির্ভরশীল নয়। আমরা এই কাজটি করার জন্য নিচের কোড ব্যবহার করতে পারি:

class CoffeeOrder {
    int createOrder() {
        // Code here
        int orderNumber = 92;
        return orderNumber;
    }
    static void printOrder(int order) {
        System.out.println("Order #" + order + " order has been placed.");
    }
}
class Main {
    public static void main(String[] args) {
        CoffeeOrder order92 = new CoffeeOrder();
        int number = order92.createOrder();
        System.out.println("Order number: " + number);
        CoffeeOrder.printOrder(number);
    }
}

আমাদের কোড ফেরত দেবে:

Order number: 92
Order #92 has been placed.

আমাদের কোড ধাপে ধাপে ব্রেকডাউন করি। প্রথমে আমরা CoffeeOrder নামে একটি ক্লাস ডিক্লেয়ার করেছি। CoffeeOrder দুটি মেথড ধারণ করে: createOrder() এবং printOrder()।

createOrder() একটি রেগুলার মেথড যা একটি অর্ডার তৈরি করে এবং একটি অর্ডার নম্বর ফেরত দেয়। printOrder() একটি স্ট্যাটিক মেথড যা বারিস্টাকে একটি নতুন অর্ডার প্লেস হয়েছে তা নোটিফাই করার জন্য কনসোলে একটি মেসেজ প্রিন্ট করে।

আমাদের মেইন প্রোগ্রামে, আমরা CoffeeOrder-এর একটি অবজেক্ট তৈরি করেছি order92 নামে। এই অবজেক্ট অর্ডার #৯২-এর ডেটা সংরক্ষণ করে। তারপর আমরা createOrder() মেথড ব্যবহার করি একটি অর্ডার নম্বর পেতে, এবং আমরা সেটি প্রিন্ট আউট করি, "Order number: " দিয়ে শুরু করে, কনসোলে।

যখন আমরা createOrder() মেথড ইনভোক করি, আমরা order92.createOrder() ব্যবহার করি। এর কারণ হলো createOrder() একটি স্ট্যাটিক মেথড নয়, তাই আমরা আমাদের অবজেক্ট ম্যানিপুলেট করার সময় সেটি অ্যাক্সেস করতে পারি।

আমাদের মেইন কোডের শেষে, আমরা CoffeeOrder.printOrder() ব্যবহার করি "Order #[order number] order has been placed." মেসেজ কনসোলে প্রিন্ট করতে। এই মেসেজে, order number একটি নির্দিষ্ট অর্ডারের সাথে জড়িত নম্বরের সমান। কারণ printOrder() একটি স্ট্যাটিক মেথড, আমাদের এটিকে অ্যাক্সেস করতে CoffeeOrder (আমাদের ক্লাস) ব্যবহার করতে হয়।

যদি আমরা order92.printOrder() ব্যবহার করার চেষ্টা করি (যেটি আমাদের ক্লাসের একটি ইনস্ট্যান্স ইনভোক করে), যেভাবে আমরা createOrder() মেথড ব্যবহার করেছিলাম, তবে আমাদের কোড আমাদের একটি সতর্কতা দেবে।

জাভা Static ভেরিয়েবল

জাভা-তে static কিওয়ার্ড স্ট্যাটিক ইনস্ট্যান্স ভেরিয়েবল তৈরি করতেও ব্যবহার করা যায়। স্ট্যাটিক ভেরিয়েবল একটি ক্লাসের অংশ এবং প্রোগ্রাম এক্সিকিউশনের শুরুতেই একবার ইনিশিয়ালাইজ হয়।

স্ট্যাটিক ভেরিয়েবল একটি অবজেক্টের অংশ নয়। এর মানে সেগুলো অ্যাক্সেস করতে আপনাকে সম্পর্কিত ক্লাস রেফারেন্স করতে হবে। জাভা-তে একটি স্ট্যাটিক ভেরিয়েবল ডিক্লেয়ার করার সিনট্যাক্স:

static String COFFEE_NAME = "Espresso";

এই উদাহরণে, আমরা COFFEE_NAME নামে একটি স্ট্যাটিক ভেরিয়েবল ডিক্লেয়ার করেছি, যেটি আমরা স্ট্রিং মান Espresso অ্যাসাইন করেছি।

জাভা স্ট্যাটিক ভেরিয়েবল ব্যবহার প্রদর্শন করার জন্য একটি উদাহরণ দেখি।

ধরুন, আমরা একটি কফি শপে অর্ডার প্রসেস করার একটি প্রোগ্রাম তৈরি করছি। এই প্রোগ্রামটি ডিউটিতে থাকা বারিস্টার সংখ্যা সংরক্ষণ করবে, এবং যখন একটি অর্ডার তৈরি হবে, প্রোগ্রামটি সেটিকে সেই বারিস্টার নামের সাথে অ্যাসোসিয়েট করবে যিনি সেটি প্রিপেয়ার করবেন।

আমরা আমাদের কফি প্রসেসিং প্রোগ্রাম তৈরি করতে নিচের কোড ব্যবহার করতে পারি:

class CoffeeOrder {
    int baristasOnDuty = 2;
    static String name = "Hannah Johnson";
    public static void main(String[] args) {
        CoffeeOrder order111 = new CoffeeOrder();
        System.out.println("Baristas on duty: " + baristasOnDuty);
        System.out.println("Assigned barista: " + order111.name);
    }
}

আমাদের কোড ফেরত দেবে:

Baristas on duty: 2
Assigned barista: Hannah Johnson

আমাদের কোডে, আমরা নিচের দুটি ভেরিয়েবল ডিক্লেয়ার করেছি:

  • baristasOnDuty. এটি একটি স্ট্যান্ডার্ড ভেরিয়েবল, যার মানে এটি আমাদের ক্লাসে সর্বত্র অ্যাক্সেস করা যায়।
  • name. এটি একটি স্ট্যাটিক ভেরিয়েবল, যার মানে আমাদের এর মান রিট্রিভ করতে সেটির সাথে জড়িত অবজেক্ট রেফারেন্স করতে হবে।

আমাদের মেইন প্রোগ্রামে, আমরা CoffeeOrder ক্লাসের একটি ইনস্ট্যান্স তৈরি করি এবং সেটি order111 বলে কল করি। তারপর আমরা মেসেজ "Baristas on duty: " প্রিন্ট করি তারপর baristasOnDuty ভেরিয়েবলের কন্টেন্ট। কারণ এটি একটি স্ট্যান্ডার্ড ভেরিয়েবল, আমাদের এর ক্লাস নাম রেফারেন্স করতে হবে না।

আমাদের কোডের পরের লাইনে, আমরা "Assigned barista: " মেসেজ কনসোলে প্রিন্ট করি, তারপর অর্ডারটি যেন বারিস্টার কাছে অ্যাসাইন করা হয় তার নাম। যাইহোক, বারিস্টার নামটি একটি স্ট্যাটিক ভেরিয়েবল হিসেবে সংরক্ষিত।

এর মানে, বারিস্টার নামটি রিট্রিভ করতে, আমাদের সেটির সাথে জড়িত অবজেক্টের নাম রেফারেন্স করতে হবে। এই কেসে, আমরা order111.name ব্যবহার করি বারিস্টার নাম রিট্রিভ করতে। এর কারণ হলো name ভেরিয়েবলটি স্ট্যাটিক এবং তাই শুধু order111 অবজেক্ট রেফারেন্স করলে অ্যাক্সেস করা যায়।

জাভা Static ব্লক

জাভা static কিওয়ার্ড একটি স্ট্যাটিক ব্লক তৈরি করতেও ব্যবহার করা যায়। যদি একটি ক্লাসে ভিন্ন ভিন্ন স্ট্যাটিক ভেরিয়েবল রয়েছে যেগুলো আলাদা আলাদা ইনিশিয়ালাইজ করার দরকার হয়, তবে আপনাকে একটি স্ট্যাটিক ব্লক ব্যবহার করা উচিত।

স্ট্যাটিক ব্লক একবার এক্সিকিউট হয়—যখন ক্লাসটি প্রথমবার কম্পিউটারের মেমরিতে লোড হয়। জাভা-তে একটি স্ট্যাটিক ব্লক কোডের সিনট্যাক্স:

static {
    // Code here
}

স্ট্যাটিক ব্লক কীভাবে কাজ করে সেটি প্রদর্শন করার জন্য একটি উদাহরণ দিয়ে চলি। ধরুন, আমাদের কে বলা হয়েছে A new order is incoming … মেসেজটি প্রোগ্রাম অর্ডারটি একটি বারিস্টাকে অ্যাসাইন করার আগে কনসোলে প্রিন্ট করাতে, যাতে বারিস্টারা প্রস্তুত থাকতে পারে। আমরা একটি স্ট্যাটিক ক্লাস তৈরি করে এটি করতে পারি। স্ট্যাটিক ক্লাসটি প্রোগ্রাম প্রথমবার এক্সিকিউট হলে চলে।

উপরোক্ত মেসেজ প্রিন্ট করে, তারপর একটি অর্ডার একটি বারিস্টাকে অ্যাসাইন করে এমন একটি স্ট্যাটিক ক্লাসের উদাহরণ:

class CoffeeOrder {
    int baristasOnDuty = 2;
    static String name = "Hannah Johnson";
    static {
        System.out.println("A new order is incoming …");
    }
    public static void main(String[] args) {
        CoffeeOrder order111 = new CoffeeOrder();
        System.out.println("Baristas on duty: " + baristasOnDuty);
        System.out.println("Assigned barista: " + order111.name);
    }
}

আমাদের কোড ফেরত দেবে:

A new order is incoming …
Baristas on duty: 2
Assigned barista: Hannah Johnson

আমাদের কোডে, আমরা প্রথমে baristasOnDuty এবং name ভেরিয়েবলগুলো ইনিশিয়ালাইজ করেছি। তারপর প্রোগ্রাম "A new order is incoming …" মেসেজ কনসোলে প্রিন্ট করে। এই মেসেজ আমাদের স্ট্যাটিক ব্লক কোডে সংরক্ষিত ছিল। প্রোগ্রাম স্ট্যাটিক ব্লকের কন্টেন্ট এক্সিকিউট করার পর, আমাদের মেইন প্রোগ্রাম চালাল, যা আমাদের আগের উদাহরণের মেইন প্রোগ্রামের মতো আউটপুট দিয়েছে।

উপসংহার

জাভা static কিওয়ার্ডের অনেক ব্যবহার রয়েছে। আপনি static কিওয়ার্ড ব্যবহার করে স্ট্যাটিক মেথড, স্ট্যাটিক ভেরিয়েবল, এবং স্ট্যাটিক কোড ব্লক তৈরি করতে পারেন।

এই টিউটোরিয়াল উদাহরণসহ static কিওয়ার্ডের বেসিকস এবং আপনি কীভাবে static কিওয়ার্ড মেথড, ভেরিয়েবল, এবং কোড ব্লকের সাথে ব্যবহার করতে পারেন তা আলোচনা করেছি। এই টিউটোরিয়াল পড়ার পর, আপনি জাভা static কিওয়ার্ড প্রোফেশনালের মতো ব্যবহার করতে পারবেন।

  1. জাভাতে ক্লাস/স্ট্যাটিক মেথড কী?

  2. জাভাতে ইন্টারফেস

  3. জাভাতে অ্যাবস্ট্রাক্ট ক্লাস

  4. জাভাতে ফাইনাল ক্লাস