JavaRush /Java Blog /Random-ID /Rehat kopi #123. Konstruktor Java - Pertanyaan dan Jawaba...

Rehat kopi #123. Konstruktor Java - Pertanyaan dan Jawaban Wawancara Teknis

Dipublikasikan di grup Random-ID
Sumber: Hackenoon

Apa itu Konstruktor?

Konstruktor adalah metode khusus yang didefinisikan dalam suatu kelas dengan nama yang sama dengan nama kelasnya. Konstruktor Java seperti metode yang tidak memiliki tipe kembalian. Rehat kopi #123.  Konstruktor Java - Pertanyaan dan Jawaban Wawancara Teknis - 1Konstruktor memainkan peran paling penting dalam inisialisasi objek dan dalam artikel ini, kami akan mencantumkan contoh pertanyaan wawancara yang mencakup konstruktor di Java. Anda juga akan belajar tentang pentingnya konstruktor di Java, melihat contoh kode dan detail penting lainnya yang akan membantu Anda menjawab pertanyaan tentang konstruktor Java dalam sebuah wawancara.

Mengapa konstruktor dibutuhkan? Jelaskan secara rinci

Katakanlah kita mempunyai kelas bernama Student . Dan kami memiliki variabel instan name dan roll_number .
class Student{
String name;
int rollNo;
}
Sekarang, jika kita membuat 1000 objek, maka JVM akan menginisialisasi nilai-nilai ini dengan tipe default Name = null dan rollNo = 0 . Mengidentifikasi objek individual ini tidak mungkin dilakukan, dan memberikan nilai pada masing-masing objek akan meningkatkan jumlah kode, yang dianggap sebagai praktik pemrograman yang buruk. Oleh karena itu, untuk menghindari hal ini, digunakan konstruktor. Artinya, tujuan konstruktor di Java adalah untuk menginisialisasi nilai variabel instan kelas.

Jenis konstruktor apa yang ada di Java?

Ada tiga jenis konstruktor di Java:
  • Konstruktor Default
  • Konstruktor Tanpa Argumen
  • Konstruktor Berparameter

Apa itu Konstruktor Default di Java?

Konstruktor Default adalah konstruktor yang dibuat oleh JVM saat runtime jika tidak ada konstruktor yang ditentukan di kelas. Tugas utama konstruktor default adalah menginisialisasi nilai instance sesuai dengan tipe defaultnya. Contoh konstruktor default di Java:
class DefaultConstructor{
int id;
String name;
}
Nah untuk kelas ini, jika kita membuat sebuah objek, maka di dalam JVM akan ada konstruktor default yang diberi nilai default.
DefaultConstructor df= new DefaultConstructor();
Sekarang jika kita mencetak nilainya kita akan mendapatkan:
Cetak = df.id = 0.df.nama = null.

Apa itu Konstruktor Tanpa Argumen?

Konstruktor tanpa argumen adalah konstruktor yang dapat didefinisikan secara eksplisit untuk menginisialisasi nilai instance. Misalnya:
class NoArgConstuctor{ int a; int b;

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

}

Apa itu Konstruktor Berparameter?

Konstruktor berparameter adalah konstruktor yang menerima parameter untuk menginisialisasi instance. Misalnya:
class ParameterizedConstuctor{
String name;
int age;
//Parameterized Constructor
ParameterizedConstuctor(String name, int age){
this.name = name;
this.age = age;
}
}

Apa aturan untuk mendefinisikan konstruktor?

Untuk mendefinisikan konstruktor, Anda harus mengikuti beberapa aturan:
  • Nama konstruktor harus sesuai dengan nama kelas.

  • Seharusnya tidak ada tipe pengembalian konstruktor di Java.

  • Satu-satunya pengubah yang berlaku untuk konstruktor adalah:

    • publik
    • bawaan
    • terlindung
    • pribadi
  • Konstruktor dapat mengambil sejumlah parameter.

  • Pengubah final, tersinkronisasi, statis dan abstrak tidak diperbolehkan dalam konstruktor.

  • Konstruktor tidak mendukung pernyataan return di dalam tubuhnya.

  • Mungkin ada pengecualian dengan pernyataan throw di konstruktor .

  • Penggunaan klausa throws dengan konstruktor dapat diterima.

  • Konstruktor tidak boleh menghasilkan rekursi.

Kapan kita bisa menggunakan konstruktor pribadi?

Jika kita tidak ingin membuat objek kelas tertentu dari luar, kita bisa menggunakan konstruktor tertutup atau privat. Dengan mendeklarasikan konstruktor sebagai konstruktor privat, kita dapat membuat objek hanya di dalam kelas. Kelas singleton adalah contoh bagus penggunaan konstruktor privat.

Apa pengubah akses konstruktor default jika kita tidak mendefinisikannya secara eksplisit?

Pengubah akses default konstruktor akan selalu sama dengan pengubah kelas. Jika kelasnya bersifat publik, maka konstruktornya juga akan bersifat publik. Jika kelasnya bersifat privat, maka konstruktornya juga akan bersifat privat. Hal yang sama akan terjadi dengan pengubah akses lainnya.

Tulis keluaran cuplikan kode di bawah ini dan jelaskan

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();
}
}
Kode di atas akan mencetak:
Selamat datang di WawancaraBit. Selamat datang di Scaler Academy oleh InterviewBit.
Kita akan mendapatkan keluaran ini karena jika kita tidak menyertakan kata kunci super() atau this() di konstruktor pada baris pertama, JVM akan otomatis memasukkannya saat runtime. JVM melakukan hal ini karena mewarisi dari kelas lain dan fungsinya juga akan diimplementasikan di kelas turunan. Jadi, ketika menetapkan nilai default ke instance kelas dasar, JVM menambahkan kata kunci super() secara default .

Tinjau kodenya dan tunjukkan apakah kode tersebut valid atau tidak. Jelaskan alasannya

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();
}
}
Kode di atas tidak valid karena merupakan konstruktor yang sama di dalam konstruktor Scaler Academy . Hal ini menciptakan rekursi di konstruktor, yang tidak diperbolehkan. Oleh karena itu, kita akan menerima kesalahan waktu kompilasi yang terkait dengan panggilan ke konstruktor rekursif.

Bisakah kita menggunakan dua konstruktor dalam satu kelas di Java?

Ya, kita dapat menggunakan sejumlah konstruktor dalam satu kelas, dengan dua syarat:
  • Parameter konstruktor harus berbeda.
  • Seharusnya tidak ada rekursi di konstruktor.
Contoh. Pertimbangkan dua konstruktor dari 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.");
}
Kode ini tidak valid karena akan membuat rekursi. Konstruktor tanpa argumen akan memanggil konstruktor dengan parameter, dan konstruktor dengan parameter akan memanggil konstruktor tanpa argumen.

Bisakah kita mengganti konstruktor di Java?

Tidak, konsep kelebihan beban konstruktor tidak berlaku di Java.

Bisakah konstruktor menjadi final di Java?

Tidak ada konstruktor yang bisa menjadi final. Hal ini karena kata kunci terakhir digunakan untuk berhenti menimpa metode di kelas turunan. Namun pada konstruktor tidak berlaku konsep overriding sehingga tidak perlu menuliskan kata kunci final . Jika kita menulis kata kunci terakhir di konstruktor, kita akan mendapatkan kesalahan waktu kompilasi yang disebut tipe pengembalian yang diperlukan karena kompiler memperlakukannya sebagai sebuah metode.

Bisakah konstruktor menjadi statis di Java?

Tidak, konstruktor Java tidak boleh statis. Ini karena kata kunci statis digunakan ketika kita ingin anggota menjadi bagian dari suatu kelas, bukan suatu objek. Tetapi konstruktor dimaksudkan untuk menginisialisasi objek, sehingga kompiler akan memperlakukannya sebagai sebuah metode. Kita akan mendapatkan error tipe pengembalian yang diperlukan .

Jelaskan perbedaan antara super(), super dan ini(), ini

super() dan this() adalah panggilan konstruktor. Ini hanya digunakan untuk memanggil konstruktor kelas induk atau kelas saat ini. Perhatikan bahwa “super” dan “ini” adalah kata kunci yang digunakan untuk menunjuk anggota sebuah instance dari kelasnya sendiri atau kelas dasar. Perhatikan kode di bawah ini:
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 cuplikan kode ini, this.message akan mencetak pesan “ Welcome to Scaler Academy ” dan super.message akan mencetak “ Welcome to InterviewBit ”. Beginilah cara kedua kata kunci ini digunakan untuk merujuk ke instance anggota kelas dasar dan kelas turunan.

Apa itu destruktor? Apakah destruktor ada di Jawa?

Destruktor digunakan untuk mengosongkan memori yang diperoleh oleh suatu program. Misalnya, jika memori diperlukan oleh suatu program selama eksekusinya, destruktor akan membebaskan memori tersebut sehingga program lain dapat menggunakannya. Tidak ada konsep destruktor di Java karena pekerjaan mengosongkan memori di Java ditangani oleh pengumpul sampah.

Apa itu rangkaian konstruktor di Jawa?

Ketika satu konstruktor dipanggil dari konstruktor lain, ini bisa disebut rangkaian konstruktor. Pemanggilan konstruktor tidak harus dilakukan pada kelas yang sama. Ini juga dapat dilakukan untuk kelas induk. Sebagai contoh, perhatikan gambar di bawah ini. Rehat kopi #123.  Konstruktor Java - Pertanyaan dan Jawaban Wawancara Teknis - 2Selanjutnya, kita dapat melihat kode untuk menginisialisasi objek dengan nilai nilai variabel instan berikut:
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");
}
Pada kode di atas, kita membuat objek kelas Karyawan dengan detail karyawan dan alamatnya. Kelas alamat Karyawan diwarisi oleh kelas Karyawan . Sekarang, untuk membuat instance nilai objek untuk sebuah alamat, kami tidak menetapkan nilai eksplisit ke alamat karyawan. Sebagai gantinya, kami menggunakan konstruktor kelas Employee Address untuk melakukan ini . Dan dengan bantuan super(argumen) kami membentuk rantai konstruktor untuk menginisialisasi nilai. Itulah yang dimaksud dengan rantai konstruktor.

Tentukan keluaran program dari kode tersebut dan jelaskan jawaban 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();
}
Kode di atas tidak akan mencetak apa pun karena InterviewBit() bukan konstruktor di sini. Karena kata kunci Void dan int digunakan , itu menjadi sebuah metode. Oleh karena itu kami tidak memanggil metode tersebut. Kita tidak akan mendapatkan keluaran apa pun karena untuk menjalankan metode ini kita perlu memanggilnya secara eksplisit pada objek.

Tulis program untuk menyalin nilai suatu objek ke objek baru menggunakan konstruktor

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);
}
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION