এটি সরাসরি http://www.programcreek.com/2011/10/java-class-instance-initializer/ থেকে এসেছে
1. কার্যকর করার আদেশ
নিম্নলিখিত শ্রেণীর দিকে তাকান, আপনি কি জানেন যে কোনটি প্রথমে মৃত্যুদন্ড কার্যকর করা হয়?
public class Foo {
//instance variable initializer
String s = "abc";
//constructor
public Foo() {
System.out.println("constructor called");
}
//static initializer
static {
System.out.println("static initializer called");
}
//instance initializer
{
System.out.println("instance initializer called");
}
public static void main(String[] args) {
new Foo();
new Foo();
}
}
আউটপুট:
স্ট্যাটিক ইনিশিয়ালাইজার বলা হয়
উদাহরণস্বরূপ আরম্ভকারী বলা হয়
কনস্ট্রাক্টর ডেকে আনে
উদাহরণস্বরূপ আরম্ভকারী বলা হয়
কনস্ট্রাক্টর ডেকে আনে
২. জাভা দৃষ্টান্তের আরম্ভকারী কীভাবে কাজ করে?
উপরের উদাহরণের সূচনাতে মুদ্রণ বিবৃতি রয়েছে। এটি কীভাবে কাজ করে তা বোঝার জন্য, আমরা এটিকে একটি পরিবর্তনশীল অ্যাসাইনমেন্ট স্টেটমেন্ট, যেমন,, হিসাবে বিবেচনা করতে পারি b = 0
। এটি এটি আরও স্পষ্ট করে বুঝতে পারে।
পরিবর্তে
int b = 0
, আপনি লিখতে পারে
int b;
b = 0;
অতএব, উদাহরণের সূচনা এবং উদাহরণ পরিবর্তনশীল আরম্ভকারীগুলি বেশ একই রকম।
৩. উদাহরণস্বরূপ আরম্ভকারীরা কখন কার্যকর হয়?
উদাহরণস্বরূপ ইনিশিয়ালাইজারগুলির ব্যবহার বিরল, তবে তবুও এটি উদাহরণ পরিবর্তনশীল ইনিশিয়ালাইজারগুলির দরকারী বিকল্প হতে পারে যদি:
- প্রারম্ভক কোডটি অবশ্যই ব্যতিক্রমগুলি পরিচালনা করবে
- হিসাব সম্পাদন করুন যা উদাহরণের পরিবর্তনশীল আরম্ভকারী দিয়ে প্রকাশ করা যায় না।
অবশ্যই, এই জাতীয় কোড কনস্ট্রাক্টরগুলিতে লেখা যেতে পারে। তবে যদি কোনও শ্রেণীর একাধিক কনস্ট্রাক্টর থাকে তবে আপনাকে প্রতিটি কনস্ট্রাক্টরে কোডটি পুনরাবৃত্তি করতে হবে।
উদাহরণস্বরূপ ইনিশিয়ালাইজারের সাহায্যে আপনি একবারে কোডটি লিখতে পারেন, এবং নির্ধারকটি তৈরির জন্য কোন বস্তু তৈরির জন্য নির্ধারিত হবে তা নির্বাহ করা হবে। (আমার ধারণা এটি কেবল একটি ধারণা এবং এটি প্রায়শই ব্যবহৃত হয় না))
আর একটি ক্ষেত্রে যার উদাহরণস্বরূপ আরম্ভকারীরা দরকারী তা বেনামে অভ্যন্তরীণ শ্রেণি, যা কোনও নির্মাতাকেই ঘোষণা করতে পারে না। (লগিং ফাংশন রাখার জন্য এটি কি ভাল জায়গা হবে?)
ধন্যবাদ ডেরহেইনকে।
এছাড়াও খেয়াল করুন যে অজ্ঞাতনামা শ্রেণিগুলি ইন্টারফেস প্রয়োগ করে [1] এর কোনও নির্মাণকারী নেই। সুতরাং উদাহরণস্বরূপ ইনিশিয়ালাইজারগুলির নির্মাণের সময় যে কোনও ধরণের অভিব্যক্তি সম্পাদন করা প্রয়োজন।
public static void staticMethod(){}
থাকে, যদি আপনি নির্বাহ করেনTestStatic.class.getMethod("staticMethod");
। স্ট্যাটিক ইনিশিয়ালাইজারটি চাওয়া হবে না। এখানে আরও তথ্য docs.oracle.com/javase/specs/jvms/se10/html/...