1. একটি বস্তু তৈরি করা

আচ্ছা, আমরা অবজেক্ট তৈরিতে পৌঁছে গেছি। আপনি ইতিমধ্যে এটির সম্মুখীন হয়েছেন, কিন্তু এখন আমরা এই বিষয়টিকে আরও বিশদে বিশ্লেষণ করব। বস্তু তৈরি করা আসলে খুব সহজ।

একটি বস্তু তৈরি করতে, আপনাকে নতুন অপারেটর ব্যবহার করতে হবে। একটি বস্তু তৈরি করা প্রায় এই মত দেখায়:

new Class(arguments)

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

Class name = new Class(arguments)

যেখানে একটি নতুন ভেরিয়েবল তৈরি করা হয় এবং সমান চিহ্নের ডানদিকের কোডটি হল একটি নতুন বস্তুর সৃষ্টি যার ধরন ।Class nameClass

উদাহরণ:

কোড বিঃদ্রঃ
Object o = new Object();
একটি Objectবস্তু তৈরি করুন
Cat pet = new Cat();
একটি Catবস্তু তৈরি করুন
Scanner console = new Scanner(System.in)
একটি Scannerবস্তু তৈরি করুন

প্রোগ্রামাররা প্রায়ই তাদের ক্লাসের পরে ভেরিয়েবলের নাম রাখে, কিন্তু ছোট হাতের অক্ষর দিয়ে। একজন নবীন প্রোগ্রামারের জন্য, এই জাতীয় কোড বিভ্রান্তিকর হতে পারে:

কোড
BufferedReader bufferedReader = new BufferedReader( reader );
Cat cat = new Cat();
PersonInfo personInfo = new PersonInfo()

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

সমান চিহ্নের বাম দিকে আমরা একটি পরিবর্তনশীল তৈরি করেছি। ডানদিকে, একটি বস্তুর সৃষ্টি। এটাই.

2. কনস্ট্রাক্টর

আপনি সম্ভবত দেখেছেন যে একটি বস্তু তৈরি করার সময় কিছু আর্গুমেন্ট ঘন ঘন পাস করা হয়। আরো কি, কিছু বস্তুর জন্য আর্গুমেন্ট পাস করা হয়, কিন্তু অন্যদের জন্য নয়। আর্গুমেন্ট সহ এই পুরো প্রক্রিয়াটি কীভাবে কাজ করে?

এখানেও সবকিছু সহজ: প্রতিটি ক্লাসের একটি বিশেষ পদ্ধতি (বা পদ্ধতি) রয়েছে যা একটি বস্তু তৈরি করার সময় পাস করা আর্গুমেন্ট পরিচালনার জন্য দায়ী। এই পদ্ধতিগুলিকে কনস্ট্রাক্টর বলা হয় । অথবা যখন আমরা শুধু একটি সম্পর্কে কথা বলছি: কনস্ট্রাক্টর

একটি নিয়মিত পদ্ধতি থেকে একটি নির্মাণকারী পদ্ধতির পার্থক্য করা সহজ। এই পদ্ধতির দুটি স্বতন্ত্র বৈশিষ্ট্য রয়েছে:

  • একটি কন্সট্রাক্টরের নাম তার শ্রেণীর নামের মতই (এবং একটি বড় অক্ষর দিয়ে শুরু হয়)
  • একটি কনস্ট্রাক্টরের কোন রিটার্ন টাইপ নেই।

সাধারণভাবে, এটি সাধারণত কেমন দেখায় তা এখানে:

modifiers Class(arguments)
{
   Code
}

উদাহরণ:

কোড বিঃদ্রঃ
public class Point
{
   public int x;
   public int y;

   Point(int x, int y)
   {
      this.x = x;
      this.y = y;
   }
}
Pointক্লাস




Pointক্লাস কনস্ট্রাক্টর
public class Solution
{
   public static void main(String[] args)
   {
      Point point = new Point(5, 10);
   }
}




ক্লাসের একটি অবজেক্ট তৈরি করুন Point। ক্লাস কনস্ট্রাক্টরকে ডাকা হবে।

কনস্ট্রাক্টর দেখতে কেমন তা লক্ষ্য করুন: এর কোন রিটার্ন টাইপ নেই এবং এর নামটি ক্লাসের নামের মতই।

এবং আরও একটি জিনিস: কন্সট্রাক্টরের ভিতরে কোডটি দেখুন। কনস্ট্রাক্টরের পরামিতিগুলির ক্লাসের ক্ষেত্রগুলির মতো একই নাম রয়েছে: x এবং y। অভিনব প্যারামিটারের নামগুলি তৈরি করা এড়াতে এটি আদর্শ অনুশীলন। নামগুলো ক্লাসের ক্ষেত্রগুলোর মতোই। নামের দ্বন্দ্ব এই কীওয়ার্ড ব্যবহার করে সমাধান করা হয়.

3. একজন কনস্ট্রাক্টরকে কল করা

একটি নতুন বস্তু তৈরি করতে যখন নতুন অপারেটর এবং "নতুন ক্লাস ( আর্গুমেন্ট )" এর মতো একটি কমান্ড ব্যবহার করা হয়, তখন দুটি জিনিস ঘটে:

  • জাভা মেশিন একটি বস্তু তৈরি করে যার ধরন হল ক্লাস
  • জাভা মেশিন অবজেক্টের কনস্ট্রাক্টরকে কল করে এবং আপনার আর্গুমেন্টে পাস করে

একজন প্রোগ্রামার হিসাবে, আপনার ক্লাসে কোন কনস্ট্রাক্টর থাকা উচিত এবং এই কনস্ট্রাক্টরগুলির কী প্যারামিটার থাকা উচিত তা আপনি সিদ্ধান্ত নিতে পারেন।

ধরুন আপনি একটি প্রাণী আশ্রয়ে বিড়ালদের ট্র্যাক রাখার জন্য একটি ক্লাস তৈরি করার সিদ্ধান্ত নিয়েছেন। তারপর আপনার Catক্লাস এই মত দেখতে পারে:

class Cat
{
   public String name;
   public int age;

   public Cat(String name, int age)
   {
      this.name = name;
      this.age = age;
   }
}
Cat cat = new Cat("Whiskers", 2);
এটি অনুমোদিত
Cat cat = new Cat("Whiskers");
কিন্তু এটি অনুমোদিত নয় এই কোডটি কম্পাইল করবে না।
Cat cat = new Cat();
এবং এটি অনুমোদিত নয়। এই কোড কম্পাইল হবে না.

ক্লাসের Catনাম এবং বয়সের পরামিতি সহ শুধুমাত্র একজন কনস্ট্রাক্টর আছে। যেহেতু অন্য কোন কনস্ট্রাক্টর নেই, তাই অবজেক্ট তৈরি করার সময় আপনাকে অবশ্যই বিড়ালের নাম ( name) এবং বয়স ( ) আর্গুমেন্ট হিসেবে পাস করতে হবে। ageকনস্ট্রাক্টরের কাছে আর্গুমেন্ট পাস করা ঐচ্ছিক নয়

4. একাধিক কনস্ট্রাক্টর

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

কোড বিঃদ্রঃ
class Cat
{
   public static final int UNKNOWN = -1;
   public String name;
   public int age;

   public Cat(String name, int age)
   {
      this.name = name;
      this.age = age;
   }
   public Cat(String name)
   {
      this.name = name;
      this.age = UNKNOWN; // Unknown
   }
}
Cat cat = new Cat("Whiskers", 2);
এটি অনুমোদিত: প্রথম কনস্ট্রাক্টরকে ডাকা হবে
Cat cat = new Cat("Whiskers");
এটি অনুমোদিত: দ্বিতীয় কনস্ট্রাক্টরকে ডাকা হবে
Cat cat = new Cat();
কিন্তু এটি অনুমোদিত নয় এই কোডটি কম্পাইল করবে না।

আমরা একটি বিড়াল বয়স জানা নাও হতে পারে যে জন্য অ্যাকাউন্ট করার সিদ্ধান্ত নিয়েছে. এই কেসটি পরিচালনা করার জন্য, আমরা একটি কনস্ট্রাক্টরের সাথে বিশেষ ধ্রুবক যোগ করেছি UNKNOWNযার শুধুমাত্র একটি প্যারামিটার রয়েছে — বিড়ালের নাম।

মনে রাখবেন যে আমরা এখনও উভয় কনস্ট্রাক্টরের ভিতরে উভয় ভেরিয়েবল শুরু করি। আমরা অজানা/অনুপস্থিত পরামিতিগুলিকে ধ্রুবক দিয়ে প্রতিস্থাপন করি UNKNOWN

যদি বয়স পরিবর্তনশীলের জন্য কোনো মান নির্ধারণ করা না হয়, তাহলে এটির ডিফল্ট মান 0 থাকবে। সর্বোপরি, রাস্তায় পাওয়া একটি বিড়ালছানা 0 পূর্ণ বছর হতে পারে। তার মানে বয়সের পরিবর্তনশীলের একটি শূন্য অগত্যা "অজানা বয়স" বোঝায় না।

5. ডিফল্ট কনস্ট্রাক্টর

আপনি যদি চান যে আপনার অবজেক্টগুলিকে কোনো পরামিতি ছাড়াই ইনস্ট্যান্টিয়েট করা হোক, আপনার ক্লাসকে নো-আর্গুমেন্ট কনস্ট্রাক্টর ঘোষণা করতে হবে।

প্যারামিটার ছাড়া একটি কনস্ট্রাক্টর অগত্যা কোড ছাড়া কনস্ট্রাক্টর নয়। এই ধরনের কনস্ট্রাক্টরে এমন কোড থাকতে পারে যা ভেরিয়েবলকে প্রারম্ভিক মান দিয়ে শুরু করে:

কোড বিঃদ্রঃ
class Cat
{
   public static final int UNKNOWN = -1;
   public String name;
   public int age;

   public Cat(String name, int age)
   {
      this.name = name;
      this.age = age;
   }

   public Cat()
   {
      this.name = "Nameless";
      this.age = UNKNOWN; // Unknown
   }
}
Cat cat = new Cat("Whiskers", 2);
এটি অনুমোদিত: প্রথম কনস্ট্রাক্টরকে ডাকা হবে
Cat cat = new Cat();
এটি অনুমোদিত: দ্বিতীয় কনস্ট্রাক্টরকে ডাকা হবে

ডিফল্ট কনস্ট্রাক্টর

একটি খুব গুরুত্বপূর্ণ বিষয় রয়েছে যা আপনার জানা এবং মনে রাখা উচিত।

যদি আপনার ক্লাস একটি কনস্ট্রাক্টর না ঘোষণা করে , তাহলে কম্পাইলার একটি ডিফল্ট কনস্ট্রাক্টর যোগ করবে, যা পাবলিক মডিফায়ারের সাথে একটি নো-আর্গুমেন্ট কনস্ট্রাক্টর।

কিন্তু যদি আপনার ক্লাস এমনকি একটি কনস্ট্রাক্টর ঘোষণা করে , তাহলে কোনও ডিফল্ট কনস্ট্রাক্টর যোগ করা হবে না এবং আপনি যদি এটি চান তবে আপনাকে এটি যোগ করতে হবে।

কোড বিঃদ্রঃ
class Cat
{
   public String name;
   public int age;
}
Cat cat = new Cat();
এটি অনুমোদিত: ডিফল্ট কনস্ট্রাক্টরকে কল করা হবে