Jenis Pengembalian Konstruktor di Java

1. Ikhtisar

Dalam tutorial singkat ini, kita akan fokus pada tipe kembalian untuk konstruktor di Java.

Pertama, kita akan terbiasa dengan cara kerja inisialisasi objek di Java dan JVM. Kemudian, kita akan menggali lebih dalam untuk melihat bagaimana inisialisasi objek dan tugas bekerja di bawah tenda.

2. Inisialisasi Instance

Mari kita mulai dengan kelas kosong:

public class Color {}

Di sini, kita akan membuat sebuah instance dari kelas ini dan menugaskannya ke beberapa variabel:

Color color = new Color();

Setelah menyusun potongan Java sederhana ini, mari kita intip bytecode-nya melalui perintah javap -c :

0: new #7 // class Color 3: dup 4: invokespecial #9 // Method Color."":()V 7: astore_1

Saat kita membuat instance objek di Java, JVM melakukan operasi berikut:

  1. Pertama, ia menemukan tempat di ruang prosesnya untuk objek baru.
  2. Kemudian, JVM melakukan proses inisialisasi sistem. Pada langkah ini, ini membuat objek dalam keadaan defaultnya. The baru opcode dalam bytecode sebenarnya bertanggung jawab untuk langkah ini.
  3. Akhirnya, ini menginisialisasi objek dengan konstruktor dan blok penginisialisasi lainnya. Dalam hal ini, invokespecial opcode panggilan konstruktor.

Seperti yang ditunjukkan di atas, tanda tangan metode untuk konstruktor default adalah:

Method Color."":()V

Itu adalah nama metode inisialisasi instance di JVM . Dalam hal ini, fileadalah fungsi yang:

  • tidak mengambil apa pun sebagai input (tanda kurung kosong setelah nama metode)
  • tidak mengembalikan apa-apa (V berarti void )

Oleh karena itu, tipe kembalian konstruktor di Java dan JVM tidak berlaku.

Melihat lagi tugas sederhana kami:

Color color = new Color();

Sekarang kita tahu konstruktor mengembalikan kosong , mari kita lihat cara kerja tugas.

3. Bagaimana Penugasan Bekerja

JVM adalah mesin virtual berbasis tumpukan. Setiap tumpukan terdiri dari bingkai tumpukan. Sederhananya, setiap bingkai tumpukan sesuai dengan panggilan metode. Faktanya, JVM membuat bingkai dengan panggilan metode baru dan menghancurkannya saat mereka menyelesaikan tugasnya:

Setiap bingkai tumpukan menggunakan larik untuk menyimpan variabel lokal dan tumpukan operan untuk menyimpan hasil parsial . Mengingat itu, mari kita lihat lagi bytecode:

0: new #7 // class Color 3: dup 4: invokespecial #9 // Method Color."":()V 7: astore_1

Berikut cara kerja tugas:

  • The baru instruksi menciptakan sebuah instance dari Warna dan mendorong referensi ke dalam stack operan
  • Kode op dup duplikat item terakhir pada tumpukan operan
  • The invokespecial mengambil referensi digandakan dan mengkonsumsi itu untuk inisialisasi. Setelah ini, hanya referensi asli yang tersisa di tumpukan operan
  • The astore_1 menyimpan referensi asli untuk indeks 1 dari variabel lokal larik. Awalan "a" berarti item yang akan disimpan adalah referensi objek, dan "1" adalah indeks array

Mulai sekarang, item kedua (indeks 1) dalam array variabel lokal adalah referensi ke objek yang baru dibuat . Oleh karena itu, kami tidak kehilangan referensi, dan tugas benar-benar berfungsi - bahkan ketika konstruktor tidak mengembalikan apa pun!

4. Kesimpulan

Dalam tutorial singkat ini, kita belajar bagaimana JVM membuat dan menginisialisasi instance kelas kita. Selain itu, kami melihat bagaimana inisialisasi instance bekerja di bawah tenda.

Untuk pemahaman yang lebih mendetail tentang JVM, sebaiknya periksa spesifikasinya.