Jenis Pemulangan Pembina di Jawa

1. Gambaran keseluruhan

Dalam tutorial ringkas ini, kita akan memfokuskan pada jenis pengembalian untuk konstruktor di Java.

Pertama, kita akan membiasakan bagaimana cara kerja inisialisasi objek di Java dan JVM. Kemudian, kami akan menggali lebih mendalam untuk melihat bagaimana inisialisasi dan penugasan objek berfungsi dengan baik.

2. Permulaan Permulaan

Mari mulakan dengan kelas kosong:

public class Color {}

Di sini, kita akan membuat contoh dari kelas ini dan memberikannya kepada beberapa pemboleh ubah:

Color color = new Color();

Setelah menyusun potongan Java ringkas ini, mari kita lihat pada bytecodenya melalui arahan javap -c :

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

Ketika kita membuat objek di Java, JVM melakukan operasi berikut:

  1. Pertama, ia mendapat tempat di ruang prosesnya untuk objek baru.
  2. Kemudian, JVM melakukan proses inisialisasi sistem. Dalam langkah ini, ia membuat objek dalam keadaan lalai. Yang baru Opcode dalam bytecode yang sebenarnya bertanggungjawab untuk langkah ini.
  3. Akhirnya, ia memulakan objek dengan konstruktor dan blok pemula lain. Dalam kes ini, opcode khusus memanggil pereka bentuk.

Seperti yang ditunjukkan di atas, tandatangan kaedah untuk konstruktor lalai adalah:

Method Color."":()V

The adalah nama kaedah inisialisasi contoh dalam JVM . Dalam kes ini, yangadalah fungsi yang:

  • tidak mengambil apa-apa sebagai input (kurungan kosong selepas nama kaedah)
  • tidak mengembalikan apa-apa (V bermaksud kekosongan )

Oleh itu, jenis pengembalian konstruktor di Java dan JVM adalah tidak sah.

Lihatlah tugas mudah kami:

Color color = new Color();

Sekarang setelah kita mengetahui bahawa konstruktor kembali tidak sah , mari kita lihat bagaimana tugas itu berfungsi.

3. Bagaimana Tugasan Berfungsi

JVM adalah mesin maya berasaskan timbunan. Setiap timbunan terdiri daripada bingkai timbunan. Ringkasnya, setiap kerangka tumpukan sesuai dengan panggilan metode. Sebenarnya, JVM membuat bingkai dengan panggilan kaedah baru dan menghancurkannya ketika mereka menyelesaikan tugas mereka:

Setiap bingkai timbunan menggunakan susunan untuk menyimpan pemboleh ubah tempatan dan tumpukan operan untuk menyimpan hasil separa . Oleh itu, mari kita lihat lagi kod bytec:

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

Begini cara kerja berfungsi:

  • Yang baru arahan mewujudkan contoh warna dan menolak rujukannya ke dalam tindanan operan
  • The dup Opcode duplikat item terakhir pada timbunan operan
  • The invokespecial mengambil rujukan pendua dan menggunakan ia untuk pengawalan. Selepas ini, hanya rujukan asal yang tinggal di timbunan operan
  • The astore_1 menyimpan rujukan asal kepada indeks 1 daripada pelbagai pembolehubah tempatan. Awalan "a" bermaksud item yang akan disimpan adalah rujukan objek, dan "1" adalah indeks array

Mulai sekarang, item kedua (indeks 1) dalam array pemboleh ubah tempatan adalah rujukan ke objek yang baru dibuat . Oleh itu, kami tidak kehilangan rujukan, dan tugasan benar-benar berfungsi - walaupun konstruktor tidak mengembalikan apa-apa!

4. Kesimpulan

Dalam tutorial ringkas ini, kami belajar bagaimana JVM membuat dan menginisialisasi contoh kelas kami. Lebih-lebih lagi, kami melihat bagaimana inisialisasi contoh berfungsi dengan baik.

Untuk pemahaman JVM yang lebih terperinci, adalah idea yang baik untuk melihat spesifikasinya.