Overblog
Edit post Follow this blog Administration + Create my blog
Afjal Hossain

জাভা মেইন মেথড ক্লিয়ারিটি( Java Main Method Clarity)!

July 22 2019 , Written by Easy Java Programming

টিউন-১৪ঃ আগেই বলি এ পর্ব টি আসলে সবার জন্য না। একমাত্র যারা প্রোগ্রাম নিয়ে গভীর ভাবে চিন্তা করে এ পর্ব টা মূলত তাদের জন্যেই.........

আপনি যদি আমার জাভা টিউনের ১২, ১২.১ ও ১৩ নং পর্ব  ভালোভাবে বুঝে নিজের হাতে কোড লিখে প্রোগ্রাম প্রাক্টিক্যালি করে থাকেন তাহলে নিশ্চয় ক্লাসের মধ্যে প্রোগ্রাম কে Run করার জন্য মেইন মেথড লেখার সময় এই শব্দ কয়টি লিখেছেনঃ

Public static void main(String[] args) বা  public static void main(String args[])

কিন্তু আপনি প্রোগ্রাম রান করার পর কখনো কি ভেবেছেন? জাভা প্রোগ্রামকে Run করার জন্য মেইন মেথড কেন সবসময় public? কেন private অথবা protected হয় না, কেন সবসময় static এবং void?  কেন static বাদে এবং void ছাড়া অন্যকোন টাইপ হতে পারে না । সেই সাথে কেনই-বা সবসময় String টাইপের অ্যারে প্যারামিটার হিসেবে দিতে হয়?

এইসব প্রশ্ন যদি কখনো আপনার মনে উঠে থাকে তাহলে এই টিউন টি আপনার জন্য.........

আগের পর্বে যদিও মেথড নিয়ে বিস্তারিত আলোচনা করেছি তারপরও বলে রাখি যে, একটি ফাংশন যখন একটি অবজেক্টের সাথে সম্পর্কযুক্ত হয় তখন তাকে মেথড বলে ।

চলুন ...তবে প্রথমে দেখি মেইন মেথড কেন private অথবা protected নয়, কেন সবসময় public?

কেন সবসময় public: আমরা জানি জাভাতে বেসিক্যালি ৩ ধরনের access modifier রয়েছে আর তা হলঃ private, protected এবং public. এখন আমরা যদি ক্লাসে  private কে কোন মেথডের আগে ডিফাইন করে private মেথড করি তাহলে এর মানে হল এই মেথড কে এই ক্লাস (যে ক্লাসের মধ্যে মেথডটি লেখা হয়েছে) ছাড়া অন্য কোথাও থেকে access করা যাবে না আর protected মেথড মানে হল এই মেথড এই প্যাকেজ এবং এই ক্লাসকে যেই ক্লাস (অন্য আরেকটি ক্লাস, সেটা হতে পারে একই অথবা আলাদা প্যাকেজের ক্লাস) ইনহেরিট(extends) করেছে (inherit নিয়ে অন্য একদিন লিখব)  সেই ক্লাস ছাড়া অন্য কোথাও থেকে access করা যাবে না।  কিন্তু আমরা যদি মেথড টাকে public মেথড করে রাখি তাহলে এই মেথডকে যে কেউ যে কোন জায়গা থেকে access করতে পারবে যেকোন সময়।  

তাই JVM যাতে কোন সমস্যা ছাড়াই মেইন মেথডকে access করতে পারে তাই সবসময় public রাখা হয়।

কেন সবসময় static: জাভা যেহেতু অবজেক্ট ওরিয়েন্টড ল্যাঙ্গুয়েজ তাই যেকোনো ক্লাসের মেথডকে কল করতে হলে আগে সেই ক্লাসের অবজেক্ট তৈরি করতে হয়। তারপর সেই অবজেক্ট দিয়ে সেই ক্লাসের মেথডকে কল করতে হয়। এবং যতবারই কোন ক্লাসের অবজেক্ট তৈরি করা হয় ঠিক ততবারই ঐ ক্লাসের নতুন instance তৈরি হয় মানে ঐ ক্লাসের মেথড ও ভেরিয়েবলগুলোর নতুন কপি তৈরি হয়। তো বুঝতেই পারছো আমরা কখনোই চাইবোনা যে মেইন মেথডের বার বার কোন কপি তৈরি হোক(কারন মেইন মেথড হল প্রোগ্রামের স্টাডিং পয়েন্ট সুতরাং একটা প্রোগ্রামে কখনোই একাধিক স্টাডিং পয়েন্ট থাকে না )। তাই এই সমস্যা সমাধানের জন্য আমরা মেইন মেথডকে static ডিক্লেয়ার করি। যাতে করে কোন অবজেক্ট তৈরি করা ছাড়াই JVM মেইন মেথডকে সবসময় কল করতে পারে। (static কিওয়াডটি ক্লাসের সাথে সম্পর্কযুক্ত এর মানে হল কোন ক্লাসে নতুন অবজেক্ট তৈরিতে অন্য মেথডগুলোর মতো static মেথডের কোন কপি তৈরি হবে না, একটি ক্লাসে সবসময় একটি কপি-ই থাকবে)

কেন সবসময় void: C/C++ অথবা অন্যকোন প্রোগ্রামিং ল্যাঙ্গুয়েজের মতো জাভাতে যদি int main অথবা শুধু main লিখি তাহলে জাভা Compiler মেইন মেথড কে চিনতে পারবে না । এখন প্রশ্ন, কেন তাহলে void টাইপ? উত্তর হলঃ- মেইন মেথড কোন কিছুকে রিটার্ন করে না আর void টাইপ যেহেতু কোন রিটার্ন করে না তাই void এবং এই void টাইপ ছাড়া জাভা Compiler  মেইন মেথড কে চিনতে পারবে না বা এরর দেখাবে।

কেন সবসময় String[] args: এর কারণ হল জাভা প্রোগ্রামে একের অধিক “main” নামে মেথড থাকতে পারে। যেমনঃ-

public class Test {

            public static void main(int i) {

                        System.out.println(“int main method!”);

            }

            public static void main(Integer[] ss) {

                        System.out.println(“Integer main method!”);

            }

            public static void main(String args) {

                        System.out.println(“String method!”);

            }

            public static void main(String[] args) {

                        System.out.println(“String array method!”);

            }

}

তাহলে Compiler এখন কিভাবে বুঝবে যে কোন মেথড টা অ্যাকচুয়াল “main” মেথড মানে কোন মেথডকে প্রথমে মেইন হিসাবে Run করবে?

উত্তর হলঃ যেই মেথড স্ট্রিং অ্যারে টাইপের প্যারামিটার নেয় Complier সেই মেথডকেই মেইন মেথড হিসেবে চিনবে এবং প্রথমে Run করবে। তাই উপরের ৪ নং মেথড টি প্রথমে Run হবে এবং String array method! এই লেখাটি প্রিন্ট করবে।

সুতরাং এই সমস্ত কারণেই মূলত জাভাতে সবসময় মেইন মেথডকে public static void main(String[] args) হিসেবে লেখা হয়। আরেকটি কথা এখানে args (args মানে arguments) না লিখে অন্য নামও (যেমনঃ- String[] ss বা String as[]) দেওয়া যাবে। কিন্তু শর্ত হল টাইপ String অ্যারে হতে হবে। আজ এ পর্যন্ত-ই......

 

লেখার ভুল ত্রুটি ক্ষমা সুন্দর দৃষ্টিতে দেখবেনপরবর্তী টিউন পেতে সাথেই থাকুন........

Share this post
Repost0
To be informed of the latest articles, subscribe:
Comment on this post