1. স্ট্যাটিক পদ্ধতি

স্ট্যাটিক ভেরিয়েবল ছাড়াও, ক্লাসে স্ট্যাটিক পদ্ধতিও থাকতে পারে।

নিয়মিত পদ্ধতিগুলি একটি শ্রেণীর বস্তুর (উদাহরণ) সাথে আবদ্ধ এবং ক্লাসের সাধারণ (অ-স্থির) ভেরিয়েবলগুলিকে (সেসাথে স্ট্যাটিক ভেরিয়েবল এবং পদ্ধতিগুলি ) উল্লেখ করতে পারে। স্ট্যাটিক পদ্ধতি ক্লাসের স্ট্যাটিক অবজেক্টের সাথে আবদ্ধ এবং শুধুমাত্র স্ট্যাটিক ভেরিয়েবল এবং/অথবা ক্লাসের অন্যান্য স্ট্যাটিক পদ্ধতি অ্যাক্সেস করতে পারে।

একটি ক্লাসে একটি সাধারণ (নন-স্ট্যাটিক) পদ্ধতি কল করার জন্য, আপনাকে প্রথমে ক্লাসের একটি অবজেক্ট তৈরি করতে হবে এবং তারপরে অবজেক্টের মেথডটিকে কল করতে হবে। আপনি একটি বস্তুর পরিবর্তে ক্লাসে একটি সাধারণ পদ্ধতি কল করতে পারবেন না।

উদাহরণ:

আপনি একটি ক্লাসে একটি নন-স্ট্যাটিক পদ্ধতি কল করতে পারবেন না!
public class DataInfo
{
   public int getValue()
   {
      return 100;
   }
}

public class Solution
{
   public static void main(String[] args)
   {
      System.out.println(DataInfo.getValue()); // This will generate an error!
   }
}

কিন্তু একটি স্ট্যাটিক পদ্ধতি কল করার জন্য, ক্লাসের স্ট্যাটিক অবজেক্টটি কেবল বিদ্যমান থাকাই যথেষ্ট (এবং ক্লাসটি মেমরিতে লোড হওয়ার পরে এটি সর্বদা বিদ্যমান)। এই কারণে main() পদ্ধতিটি স্ট্যাটিক। এটি ক্লাসের স্ট্যাটিক অবজেক্টের সাথে আবদ্ধ, তাই এটিকে কল করার জন্য আপনাকে কোন অবজেক্ট তৈরি করতে হবে না।

একটি মেথড স্ট্যাটিক ঘোষণা করতে, আপনাকে মেথড হেডারের আগে স্ট্যাটিক কীওয়ার্ড লিখতে হবে। এই নির্মাণের সাধারণ চেহারা নিম্নরূপ:

static Type name(parameters)
{
   method code
}

উদাহরণ:

কোড বিঃদ্রঃ
public class Solution
{
   public static void main(String args[])
   {
      test();
   }

   public static void test()
   {
      int d = 2/0;
   }
}


জাভা মেশিন mainএই ধরনের কমান্ড দিয়ে পদ্ধতিটিকে কল করে: Solution.main();



স্ট্যাটিক test()পদ্ধতিকে স্ট্যাটিক main()পদ্ধতি বলা হয়।

অন্য ক্লাস থেকে স্ট্যাটিক মেথড কল করার জন্য আপনাকে স্ট্যাটিক মেথডের নামের আগে ক্লাসের নাম উল্লেখ করতে হবে। এই নির্মাণের সাধারণ চেহারা নিম্নরূপ:

Type name = ClassName.methodName(arguments)

উদাহরণ:

কোড স্ট্যাটিক পদ্ধতি
int x = Math.min(a, b);
int min(int a, int b)
Thread.sleep(200);
void sleep(long ms)
Path path = Path.of("c:\\readme.txt");
Path of(String str)


2. স্ট্যাটিক বনাম সাধারণ (নন-স্ট্যাটিক) পদ্ধতি

স্ট্যাটিক পদ্ধতি এবং সাধারণ পদ্ধতির মধ্যে পার্থক্য কি?

একটি সাধারণ পদ্ধতি একটি সাধারণ বস্তুর সাথে আবদ্ধ থাকে (একটি শ্রেণীর একটি উদাহরণ), যখন একটি স্ট্যাটিক পদ্ধতি নয়। একটি সাধারণ পদ্ধতি তার দৃষ্টান্তে ভেরিয়েবলগুলি অ্যাক্সেস করতে পারে, কিন্তু একটি স্ট্যাটিক পদ্ধতি পারে না: এটিতে কেবল একটি যুক্ত উদাহরণ নেই।

দুটি ধরণের পদ্ধতির মধ্যে পার্থক্যগুলি নিম্নলিখিত টেবিলে প্রকাশ করা হয়েছে:

ক্ষমতা/সম্পত্তি সাধারণ পদ্ধতি স্ট্যাটিক পদ্ধতি
ক্লাসের একটি উদাহরণে আবদ্ধ হ্যাঁ না
ক্লাসের সাধারণ পদ্ধতি কল করতে পারেন হ্যাঁ না
ক্লাসের স্ট্যাটিক পদ্ধতি কল করতে পারেন হ্যাঁ হ্যাঁ
ক্লাসের সাধারণ ভেরিয়েবল অ্যাক্সেস করতে পারে হ্যাঁ না
ক্লাসের স্ট্যাটিক ভেরিয়েবল অ্যাক্সেস করতে পারে হ্যাঁ হ্যাঁ
একটি বস্তুর উপর বলা যেতে পারে হ্যাঁ হ্যাঁ
ক্লাসে ডাকা যাবে না হ্যাঁ

কেন এই ধরনের পদ্ধতি প্রয়োজন যদি তারা এত গুরুতরভাবে সীমিত হয়? উত্তর হল এই পদ্ধতিরও এর সুবিধা রয়েছে।

প্রথমত, স্ট্যাটিক পদ্ধতি এবং ভেরিয়েবল অ্যাক্সেস করার জন্য আপনাকে কোনো অবজেক্ট রেফারেন্স পাস করতে হবে না।

দ্বিতীয়ত, কখনও কখনও আপনি একটি পরিবর্তনশীল শুধুমাত্র একটি একক উদাহরণ হতে হবে. উদাহরণস্বরূপ, System.out( সিস্টেম ক্লাসের স্ট্যাটিক আউট ভেরিয়েবল )।

এবং, তৃতীয়, কখনও কখনও আপনাকে বস্তু তৈরি করা সম্ভব হওয়ার আগে একটি পদ্ধতি কল করতে হবে। উদাহরণ স্বরূপ, জাভা মেশিন মেইন() মেথডকে কল করে প্রোগ্রামের এক্সিকিউশন শুরু করার জন্য এমনকি ক্লাসের একটি ইন্সট্যান্স তৈরি হওয়ার আগেই।

ক্লাসের একটি উদাহরণে আবদ্ধ

যখন একটি সাধারণ পদ্ধতি বলা হয়, একটি আর্গুমেন্ট - যে বস্তুর উপর পদ্ধতিটি বলা হয় - এটিকে অস্পষ্টভাবে প্রেরণ করা হয়। এই প্যারামিটার বলা হয় this এই অন্তর্নিহিত প্যারামিটার (অবজেক্টের একটি রেফারেন্স যার উপর পদ্ধতিটি বলা হয়) স্ট্যাটিকগুলি থেকে সাধারণ পদ্ধতিগুলিকে আলাদা করে।

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

ক্লাসের সাধারণ পদ্ধতি কল করতে পারেন

একটি সাধারণ পদ্ধতিতে সর্বদা অন্তর্নিহিত thisপ্যারামিটার থাকে, তাই আপনার কাছে সর্বদা সেই বস্তুর একটি রেফারেন্স থাকে যার উপর পদ্ধতিটি বলা হয়। thisযখনই আপনি অন্য সাধারণ পদ্ধতির ভিতরে একটি সাধারণ পদ্ধতিতে কল করেন, সেই কলটি করতে অন্তর্নিহিত প্যারামিটার ব্যবহার করা হয়। উদাহরণ

কোড কিভাবে এটা কাজ করে
int min(int a, int b)
{
   return a < b ? a : b;
}

int min(int a, int b, int c)
{
   int t = min(a, b);
   return min(t, c);
}
int min(int a, int b)
{
   return a < b ? a : b;
}

int min(int a, int b, int c)
{
   int t = this.min(a, b);
   return this.min(t, c);
}

এই কারণে আপনি একটি স্ট্যাটিক থেকে একটি সাধারণ পদ্ধতি কল করতে পারবেন না। thisএকটি স্ট্যাটিক পদ্ধতির ভিতরে নাম দেওয়া কোন অন্তর্নিহিত পরিবর্তনশীল নেই ।

অথবা অন্য পরিস্থিতি কল্পনা করুন: আমাদের ক্লাসের একটি বস্তু এখনও আমাদের প্রোগ্রামে তৈরি করা হয়নি। আমরা কি আমাদের ক্লাসের একটি স্ট্যাটিক পদ্ধতি বলতে পারি? হ্যাঁ. এবং এই স্ট্যাটিক পদ্ধতি একটি সাধারণ (অ-স্থির) পদ্ধতি কল করতে পারেন?

আচ্ছা, কি বস্তু আমরা এটা কল করব? সর্বোপরি, আমাদের ক্লাসের একটি উদাহরণ এখনও বিদ্যমান নেই!

ক্লাসের স্ট্যাটিক পদ্ধতি কল করতে পারেন

স্ট্যাটিক পদ্ধতিগুলি যে কোনও জায়গা থেকে - প্রোগ্রামের যে কোনও জায়গা থেকে কল করা যেতে পারে। এর মানে হল যে তাদের স্ট্যাটিক পদ্ধতি এবং সাধারণ উভয় থেকে বলা যেতে পারে। এখানে কোন বিধিনিষেধ নেই।

ক্লাসের সাধারণ ভেরিয়েবল অ্যাক্সেস করতে পারে

thisআপনি একটি সাধারণ পদ্ধতি থেকে একটি ক্লাসের সাধারণ ভেরিয়েবল অ্যাক্সেস করতে পারেন, যেহেতু এটি সহজেই অন্তর্নিহিত প্যারামিটারের মাধ্যমে ক্লাসের একটি উদাহরণের একটি রেফারেন্স পেতে পারে।

একটি স্ট্যাটিক পদ্ধতি সাধারণ ভেরিয়েবলের মান পেতে ক্লাসের কোন উদাহরণটি ব্যবহার করা উচিত তা জানে না। এবং আরও সাধারণভাবে, আমরা সহজেই এমন একটি পরিস্থিতি পেতে পারি যেখানে একটি স্ট্যাটিক পদ্ধতি বলা হয় তবে প্রোগ্রামটিতে ক্লাসের একটিও একটি উদাহরণ তৈরি করা হয়নি।

ফলস্বরূপ, স্ট্যাটিক পদ্ধতিগুলি একটি শ্রেণীর সাধারণ ভেরিয়েবল অ্যাক্সেস করতে পারে না।

ধরুন একটি স্ট্যাটিক পদ্ধতি একটি সাধারণ পদ্ধতিকে কল করে। কি বস্তু যে সাধারণ পদ্ধতি বলা উচিত?

স্ট্যাটিক পদ্ধতি

কেউ জানে না! এই কারণেই আপনি কোনও বস্তুর রেফারেন্স না দিয়ে একটি স্ট্যাটিক থেকে একটি সাধারণ পদ্ধতিকে কল করতে পারবেন না !

ক্লাসের স্ট্যাটিক ভেরিয়েবল অ্যাক্সেস করতে পারে

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

একটি বস্তুর উপর বলা যেতে পারে

একটি বস্তুর উপর স্ট্যাটিক এবং সাধারণ উভয় পদ্ধতিই কল করা যেতে পারে। একটি সাধারণ পদ্ধতি কল সম্ভব - প্রকৃতপক্ষে, এটি একটি সাধারণ পদ্ধতি কল করার একমাত্র উপায়। একটি অবজেক্টের উপর একটি স্ট্যাটিক পদ্ধতিও বলা যেতে পারে: এই ক্ষেত্রে কম্পাইলার নিজেই ভেরিয়েবলের ধরন নির্ধারণ করে এবং তার প্রকারের উপর ভিত্তি করে স্ট্যাটিক পদ্ধতিকে কল করে:

কোড কিভাবে কম্পাইলার এটা দেখে
Thread th = Thread.current();
th.sleep(1000);
Thread th = Thread.current();
Thread.sleep(1000);
Integer i = 1;
int x = i.parseInt("12");
Integer i = 1;
int x = Integer.parseInt("12");
"".valueOf(12);
String.valueOf(12);

ক্লাসে ডাকা যাবে

আপনি একটি ক্লাসে শুধুমাত্র একটি স্ট্যাটিক পদ্ধতি কল করতে পারেন। একটি সাধারণ পদ্ধতি কল করার জন্য, আপনার ক্লাসের একটি উদাহরণের একটি রেফারেন্স প্রয়োজন। অতএব, আপনি এই গঠন ব্যবহার করে একটি সাধারণ পদ্ধতি কল করতে পারবেন না:ClassName.methodName(arguments)