RSS

জাভা প্রোগ্রামিং এ main() মেথোডে String[] args এবং static কেন লিখা হয়??

12 Apr

আমাদের কম বেশি সবারই মনে প্রশ্ন জাগে, জাভা প্রোগ্রামিং এ main() মেথোডে String[] args এবং static কেন লিখা হয়?? আসুন একটু জানার এবং বোঝার চেস্টা করি এর পিছনে আসল কাহিনি কি।।

আমরা যদি জাভায় Public static void main( ) এভাবে মেইন মেথোডকে ডিক্লেয়ার করি, তাহলে প্রোগ্রামটি কম্পাইল করার সময় JVM(Java Virtual Machine) কোডটি রান করতে পারবেনা, সে মেইন মেথোডকে চিনতেই পারবেনা, কারন JVM সবসময়ই মেইন মেথোড এর মধ্যে একটা স্ট্রিং টাইপ প্যারামিটারকে খুঁজে। যেহেতু, একটা প্রোগ্রামের মেইন মেথোড থেকেই Execution শুরু হয়, তাই String[] args না লিখে কিংবা অন্য কোন ডাটা টাইপ যেমন Float, Double, Integer লিখলে প্রোগ্রামটি ইরর খাবে।। এটাই আসল কারন।।

এবার আসি, static এই শব্দটি কেন জাভা প্রোগ্রামিং এ লেখা হয়? নিচের কোডটি মনোযোগ দিয়ে ঠান্ডা মাথায় দেখুন, মজা আছে… 😀

  1. public class student{   
  2.           int boy;
  3.           static int girl;
  4.     void boysNumber()
  5.     {
  6.            boy=30;
  7.            System.out.println(boy);
  8.     }
  9.     static void girlsNumber()
  10.     {
  11.            girl=10;
  12.            System.out.println(girl);
  13.     }
  14.     public static  void main(String args[])
  15.     {
  16.            student s=new student();
  17.            s.boysNumber(); //এখানে দেখুন, boysNumber() মেথোডটিকে access করার জন্য student class এর অব্জেক্ট (s) তৈরি করতে হয়েছে। 
  18.            girlsNumber();  // এবার, এখানে দেখুন, girlsNumber() মেথোডটিকে access করার জন্য কোন অব্জেক্ট তৈরি করতে হয়নি।
  19.                       
  20.     }
  21. }

প্রোগ্রামটি কোথা থেকে শুরু হবে বলেন দেখি, হ্যা, ১৭ নম্বর লাইন থেকে, কারন এখানে main() মেথোডটি আছে। আমরা চাচ্ছি, প্রোগ্রামটি আমাদেরকে প্রিন্ট করে দেখাবে student class এর ছাত্র এবং ছাত্রীর সঙ্খ্যা। এখন, স্বভাবতই যদি আমরা ছাত্রের সঙ্খ্যা প্রিন্ট করতে চাই তাহলে আমাদেরকে boysNumber() মেথোডকে এক্সেস করতে হবে। যেহেতু আমরা boysNumber() মেথোডটি static বলিনি তাই boysNumber() মেথোডটিকে এক্সেস করতে হলে আমাদেরকে প্রথমে student class এর অব্জেক্ট তৈরি করে নিতে হবে। আমরা s নামে একটা অব্জেক্ট তৈরি করেছি এবং s.boysNumber() লিখে boysNumber() মেথোডটিকে এক্সেস করেছি। তখন সে প্রিন্ট করছে ছাত্রের সঙ্খ্যা ৩০।

আবার, দেখুন যেহেতু আমরা girlsNumber() কে static ডিক্লেয়ার করেছি, তাই এক্ষেত্রে student ক্লাসের কোন অব্জেক্ট তৈরি করতে হয়নি। সরাসরি girlsNumber() মেথোডটিকে লিখে দিয়েছি  তাতেই girlsNumber() মেথোডটি এক্সেস হয়েছে এবং প্রিন্ট করছে ছাত্রীর সংখ্যা ১০।

তাহলে আমাদের প্রশ্ন হলো, main() মেথোডে static ব্যবহার করাতে এই পোষ্টের সাথে মিল কোথায়??? এখনো এই প্রশ্ন আছে আপনার মাথায় !!!

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

এখন, আমরা জানি main() ও একটা মেথোড। সুতরাং main() মেথোডকেও এক্সেস করতে হলে অবশ্যই আমাদের ক্লাসের অব্জেক্ট তৈরি করা উচিত! কিন্তু না, যেহেতু মেইন মেথোড একটা বস(boss) method, 😀  তাই প্রোগ্রাম যখন main() মেথোড থেকে পড়া শুরু করে এবং দেখে যে main() মেথোডটি static এ ডিক্লেয়ার করা আছে, তখন কোন ধরনের অব্জেক্ট এর ঝামেলা ছাড়াই main() মেথোডটি access হয়ে যায় তার মানে main() মেথোডের ভিতরের স্টেটমেন্টগুলো এক্সিকিউট হয়।। তাই, যদি আমরা main() মেথোডকে static হিসেবে ডিক্লেয়ার না করি তাহলে মেইন মেথোডটি এক্সিকিউট ই হবেনা, আর মেইন মেথোড এক্সিকিউট না হলে প্রোগ্রামটাই এক্সিকিউট হবেনা। 🙂

আশা করি, বুঝতে পাচ্ছেন, কেন মেইন মেথোডে static এবং String[] args লিখা হয়।। আপনাকে অসংখ্য ধন্যবাদ এতক্ষনধরে পোস্টটি পরার জন্য। আবার দেখা হবে অন্য কোন টপিক্স নিয়ে।। সে পর্জন্ত ভালো থাকবেন।আল্লাহ হাফেজ।।

Advertisements
 

Tags:

4 responses to “জাভা প্রোগ্রামিং এ main() মেথোডে String[] args এবং static কেন লিখা হয়??

  1. al noman

    April 12, 2015 at 6:21 pm

    well, then what actually happen when
    public class A {
    static{
    //todo
    }
    public static void main(String arg[]){
    //todo
    }
    }

    Like

     
  2. Sharif Chowdhury

    April 12, 2015 at 9:45 pm

    অসাধারন ভাই 🙂

    Like

     
  3. তৌহিদুল স্বপন

    April 13, 2015 at 2:51 pm

    ধন্যবাদ শরীফ।। 🙂

    Like

     
  4. তৌহিদুল স্বপন

    April 13, 2015 at 2:53 pm

    নোমান ভাই, আপনার কোড অনুযায়ীতো, static{—-} এর মধ্যে শুধুমাত্র ভেরিয়েবল ডিক্লেয়ার করতে পারলাম । আর তো কিছুই করা যায় না।। আমি কিছু বলতে পারলাম না কি ঘটবে… 😦 😦 😦 😛

    Like

     

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s