JavaRush /Blog Java /Random-MS /Coffee break #123. Java Constructor - Soalan dan Jawapan ...

Coffee break #123. Java Constructor - Soalan dan Jawapan Temuduga Teknikal

Diterbitkan dalam kumpulan
Sumber: Hackenoon

Apa itu Pembina?

Pembina ialah kaedah khas yang ditakrifkan dalam kelas dengan nama yang sama dengan nama kelas. Pembina Java adalah seperti kaedah yang tidak mempunyai jenis pulangan. Coffee break #123.  Java Constructor - Soalan dan Jawapan Temuduga Teknikal - 1Pembina memainkan peranan paling penting dalam pemulaan objek dan dalam artikel ini, kami akan menyenaraikan contoh soalan temu bual yang merangkumi pembina di Jawa. Anda juga akan belajar tentang kepentingan pembina dalam Java, lihat contoh kod dan butiran penting lain yang akan membantu anda menjawab soalan tentang pembina Java dalam temu bual.

Mengapa pembina diperlukan? Terangkan secara terperinci

Katakan kita mempunyai kelas bernama Pelajar . Dan kami mempunyai nama pembolehubah contoh dan roll_number .
class Student{
String name;
int rollNo;
}
Sekarang, jika kita mencipta 1000 objek, maka JVM akan memulakan nilai ini dengan jenis lalai Name = null dan rollNo = 0 . Mengenal pasti objek individu ini tidak mungkin, dan memberikan nilai kepada setiap objek akan meningkatkan jumlah kod, yang dianggap sebagai amalan pengaturcaraan yang buruk. Oleh itu, untuk mengelakkan ini, pembina digunakan. Iaitu, tujuan pembina di Jawa adalah untuk memulakan nilai pembolehubah contoh kelas.

Apakah jenis pembina yang terdapat di Jawa?

Terdapat tiga jenis pembina di Jawa:
  • Pembina Lalai
  • Pembina Tanpa Hujah
  • Pembina berparameter

Apakah Pembina Lalai di Jawa?

Pembina Default ialah pembina yang dicipta oleh JVM pada masa jalan jika tiada pembina ditakrifkan dalam kelas. Tugas utama pembina lalai adalah untuk memulakan nilai keadaan mengikut jenis lalainya. Contoh pembina lalai dalam Java:
class DefaultConstructor{
int id;
String name;
}
Sekarang untuk kelas ini, jika kita mencipta objek, maka di dalam JVM akan ada pembina lalai yang diberi nilai lalai.
DefaultConstructor df= new DefaultConstructor();
Sekarang jika kita mencetak nilai kita akan mendapat:
Cetak = df.id = 0.df.name = null.

Apakah Pembina Tanpa Argumen?

Pembina tanpa hujah ialah pembina yang boleh ditakrifkan secara eksplisit untuk memulakan nilai kejadian. Sebagai contoh:
class NoArgConstuctor{ int a; int b;

//No Argument Constructor
NoArgConstuctor(){
a = 10;
b = 20;
}

}

Apakah Pembina Berparameter?

Pembina berparameter ialah pembina yang menerima parameter untuk memulakan kejadian. Sebagai contoh:
class ParameterizedConstuctor{
String name;
int age;
//Parameterized Constructor
ParameterizedConstuctor(String name, int age){
this.name = name;
this.age = age;
}
}

Apakah peraturan untuk menentukan pembina?

Untuk menentukan pembina, anda mesti mengikuti beberapa peraturan:
  • Nama pembina mesti sepadan dengan nama kelas.

  • Tidak sepatutnya ada jenis pulangan pembina di Jawa.

  • Satu-satunya pengubah suai yang boleh digunakan untuk pembina ialah:

    • awam
    • lalai
    • dilindungi
    • persendirian
  • Pembina boleh mengambil sebarang bilangan parameter.

  • Pengubah suai akhir, disegerakkan, statik dan abstrak tidak dibenarkan dalam pembina.

  • Pembina tidak menyokong pernyataan pulangan dalam badannya.

  • Terdapat pengecualian dengan pernyataan lontaran dalam constructor .

  • Ia boleh diterima untuk menggunakan klausa lontaran dengan pembina.

  • Pembina tidak seharusnya menghasilkan rekursi.

Bilakah kita boleh menggunakan pembina peribadi?

Jika kita tidak mahu mencipta objek kelas tertentu dari luar, kita boleh menggunakan pembina tertutup atau persendirian. Dengan mengisytiharkan pembina peribadi, kita boleh mencipta objek hanya dalam kelas. Kelas Singleton ialah contoh yang baik bagi penggunaan pembina persendirian.

Apakah yang akan menjadi pengubah akses pembina lalai jika kita tidak mentakrifkannya secara eksplisit?

Pengubah suai akses lalai bagi pembina akan sentiasa sama dengan pengubahsuai kelas. Jika kelas adalah awam, maka pembina juga akan menjadi awam. Jika kelas adalah peribadi, maka pembina juga akan menjadi peribadi. Perkara yang sama akan berlaku dengan pengubah suai akses lain.

Tulis output coretan kod di bawah dan terangkan

class InterviewBit{
InterviewBit(){
System.out.println(" Welcome to InterviewBit ");
}
}
class ScalerAcademy extends InterviewBit{
ScalerAcademy(){
System.out.println(" Welcome to Scaler Academy by InterviewBit");
}
}
class Main{
public static void main(String[] args) {
ScalerAcademy sc = new ScalerAcademy();
}
}
Kod di atas akan dicetak:
Selamat datang ke InterviewBit. Selamat datang ke Scaler Academy oleh InterviewBit.
Kami akan mendapat output ini kerana jika kami tidak memasukkan kata kunci super() atau this() dalam pembina pada baris pertama, JVM akan secara automatik memasukkannya semasa runtime. JVM melakukan ini kerana ia mewarisi daripada kelas lain dan fungsinya juga akan dilaksanakan dalam kelas terbitan. Oleh itu, apabila memberikan nilai lalai kepada contoh kelas asas, JVM menambah kata kunci super() secara lalai .

Semak kod dan nyatakan sama ada ia sah atau tidak sah. Terangkan sebabnya

class InterviewBit{
InterviewBit(){
System.out.println(" Welcome to InterviewBit ");
}
}
class ScalerAcademy extends InterviewBit{
ScalerAcademy(){
this();
System.out.println(" Welcome to Scaler Academy by InterviewBit");
}
}
class Main{
public static void main(String[] args) {
ScalerAcademy sc = new ScalerAcademy();
}
}
Kod di atas adalah tidak sah kerana ia adalah pembina yang sama di dalam pembina Akademi Scaler . Ini mewujudkan rekursi dalam pembina, yang tidak dibenarkan. Sehubungan itu, kami akan menerima ralat masa kompilasi yang dikaitkan dengan panggilan kepada pembina rekursif.

Bolehkah kita menggunakan dua pembina dalam satu kelas di Jawa?

Ya, kita boleh menggunakan sebarang bilangan pembina dalam satu kelas, tertakluk kepada dua syarat:
  • Parameter pembina mestilah berbeza.
  • Seharusnya tiada rekursi dalam pembina.
Contoh. Pertimbangkan dua pembina kelas InterviewBit yang sama :
InterviewBit(){
    this("Scaler"); // Calling parameterized constructor
    System.out.println(" No Argument Constructor");
}
InterviewBit(String name){
    this(); // Calling no-arg constructor
    System.out.println(" Constructor with Parameters.");
}
Kod ini tidak sah kerana ia akan mencipta rekursi. Pembina tanpa argumen akan memanggil pembina dengan parameter, dan pembina dengan parameter akan memanggil pembina tanpa argumen.

Bolehkah kita mengatasi pembina di Jawa?

Tidak, konsep lebihan pembina tidak boleh digunakan di Java.

Bolehkah pembina menjadi muktamad di Jawa?

Tiada pembina boleh menjadi muktamad. Ini kerana kata kunci akhir digunakan untuk berhenti mengatasi kaedah dalam kelas terbitan. Tetapi dalam pembina, konsep overriding tidak terpakai, jadi tidak perlu menulis kata kunci akhir . Jika kita menulis kata kunci akhir dalam pembina, kita akan mendapat ralat masa kompilasi yang dipanggil jenis pulangan yang diperlukan kerana pengkompil menganggapnya sebagai kaedah.

Bolehkah pembina menjadi statik di Jawa?

Tidak, pembina Java tidak boleh statik. Ini kerana kata kunci statik digunakan apabila kita mahu ahli tergolong dalam kelas dan bukannya objek. Tetapi pembina bertujuan untuk memulakan objek, jadi pengkompil akan menganggapnya sebagai kaedah. Kami akan mendapat ralat jenis pemulangan yang diperlukan .

Terangkan perbezaan antara super(), super dan ini(), ini

super() dan ini() adalah panggilan pembina. Ia hanya digunakan untuk memanggil pembina kelas induk atau kelas semasa. Ambil perhatian bahawa "super" dan "ini" ialah kata kunci yang digunakan untuk menetapkan ahli suatu tika kelasnya sendiri atau kelas asasnya. Pertimbangkan kod di bawah:
class InterviewBit{
    String message = " Welcome to InterviewBit";
}
public class Scaler extends InterviewBit
{
    String message = " Welcome to Scaler Academy";
    public void printMethod(){
        //this will print the message variable of the current class.
        System.out.println(this.message);

        //this will print the message variable of Base class.
        System.out.println(super.message);
    }
	public static void main(String[] args) {
		Scaler sa = new Scaler();
		sa.printMethod();
	}
}
Dalam coretan kod ini, this.message akan mencetak mesej " Welcome to Scaler Academy " dan super.message akan mencetak " Welcome to InterviewBit ". Beginilah cara kedua-dua kata kunci ini digunakan untuk merujuk kepada contoh ahli bagi kelas asas dan terbitan.

Apakah pemusnah? Adakah pemusnah wujud di Jawa?

Pemusnah digunakan untuk membebaskan memori yang diperolehi oleh atur cara. Sebagai contoh, jika memori diperlukan oleh atur cara semasa pelaksanaannya, pemusnah membebaskan memori tersebut supaya atur cara lain boleh menggunakannya. Tiada konsep pemusnah di Jawa kerana kerja membebaskan memori di Jawa dikendalikan oleh pemungut sampah.

Apakah rantaian pembina di Jawa?

Apabila satu pembina dipanggil daripada pembina lain, ini boleh dipanggil penjalinan pembina. Panggilan pembina tidak perlu dibuat pada kelas yang sama. Ini boleh dilakukan untuk kelas induk juga. Sebagai contoh, pertimbangkan imej di bawah. Coffee break #123.  Java Constructor - Soalan dan Jawapan Temuduga Teknikal - 2Seterusnya, kita boleh melihat kod untuk memulakan objek dengan nilai nilai pembolehubah contoh ini:
class EmployeeAddess{
    int pinCode;
    String address;
    String mobNo;
    EmployeeAddress(int pinCode, String address, String mobNo){
        this.pinCode = pinCodel
        this.address = address;
        this.mobNo = mobNo;
    }
}
class Employees extends EmployeeAddress{
    int ID;
    String name;
    String designation;
    String department;
    Employee(int ID, String name, String designation,String department,
                    int pinCode, String address, String mobNo){

        //Calling Constructor for Base class to initialize the object.
        //This can be a constructor chaining.
        super(pinCode, address, mobNo);
        this.ID = ID;
        this.name = name;
        this.designation = designation;
        this.department = department;
    }
}
public class Main{
    Employee emp = new Employee(101, "XYX", "SDE", "Cloud", 123456, "no 150, xys, xys, INDIA", "999999999");
}
Dalam kod di atas, kami mencipta objek kelas Pekerja dengan butiran pekerja dan alamatnya. Kelas alamat Pekerja diwarisi oleh kelas Pekerja . Sekarang, untuk membuat instantiate nilai objek untuk alamat, kami tidak memberikan nilai eksplisit kepada alamat pekerja. Sebaliknya, kami menggunakan pembina kelas Alamat Pekerja untuk melakukan ini . Dan dengan bantuan super(argumen) kami membentuk rantaian pembina untuk memulakan nilai. Itulah rantai pembina.

Tentukan output atur cara daripada kod dan terangkan jawapan anda.

class InterviewBit{
void InterviewBit(){
System.out.println(" Java Constructor interview questions by InterviewBit");
}
int InterviewBit(int val){
System.out.println(" Java Constructor. And Value = "+val);
}
}
public class Main{
InterviewBit ib1 = new InterviewBit();
InterviewBit ib2 = new InterviewBit();
}
Kod di atas tidak akan mencetak apa-apa kerana InterviewBit() bukan pembina di sini. Oleh kerana kata kunci Void dan int digunakan , ia menjadi kaedah. Oleh itu kami tidak memanggil kaedah. Kami tidak akan mendapat sebarang output kerana untuk melaksanakan kaedah kami perlu memanggilnya secara eksplisit pada objek.

Tulis program untuk menyalin nilai objek ke objek baru menggunakan pembina

class Rectangle{
    int length;
    int breadth;
    Rectangle(int length, int breadth){
        this.length = length;
        this.breadth = breadth;
    }

    //Overloaded Constructor for copying the value of old Object to new object
    Rectangle(Rectangle obj){
        this.length = obj.length;
        this.breadth = obj.breadth;
    }
}
public class Main{
    Rectangle obj1 = new Rectangle(10, 5);

    //New Object of rectangle class will be created with the value from obj1.
    Rectangle obj2 = new Rectangle(obj1);
}
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION