Rumah >Java >JavaSoalan temu bual >Penemuduga: Beritahu saya tentang proses pemuatan kelas (10 gambar rajah)
.
"Terdapat banyak cara untuk mendapatkan aliran binari kelas melalui nama kelas penuh"
"Untuk fasa pemuatan jenis bukan tatasusunan, anda boleh menggunakan jenis bukan tatasusunan pemuat kelas mesin maya Java untuk diselesaikan, atau anda boleh menggunakan Pemuat kelas tersuai pengguna untuk melengkapkan"
"Peringkat pemautan ini terbahagi kepada 3 bahagian, pengesahan, penyediaan dan analisis"
"Peringkat pengesahan ialah terutamanya untuk memastikan Kelas Format fail adalah betul dan tidak akan membahayakan keselamatan mesin maya apabila dijalankan."
Terdapat banyak peraturan dalam fasa pengesahan, tetapi ia dibahagikan secara kasar kepada empat peringkat berikut
"Saya tidak akan menerangkan butiran khusus secara terperinci, anda boleh melihat " "Pemahaman mendalam tentang Mesin Maya Java", artikel ini lebih suka membuat ringkasan dan memahami keseluruhan proses pemuatan kelas tanpa menghuraikan butiran Peruntukkan memori untuk pembolehubah statik kelas dan mulakannya kepada nilai lalai"Jenis data | Nilai lalai |
---|---|
bait | (bait)0 |
short | short |
0 | |
0L | |
0.0f | |
0.0d | |
false | |
char | 'u0000' |
rujukan | null |
"Jika atribut ConstantValue wujud dalam jadual atribut medan pembolehubah statik kelas, pernyataan tugasan akan dilaksanakan secara langsung"
Jadi dalam keadaan apakah atribut ConstantValue wujud dalam jadual atribut medan pembolehubah statik kelas ?
public class Person { private static int age = 10; private static final int length = 160; private static final String name = "name"; private static final String loc = new String("loc"); }"Jadi atribut panjang dan nama akan diberikan nilai yang ditentukan oleh ConstantValue dalam peringkat penyediaan"
"Kemudian pada peringkat manakah atribut umur dan lokasi ditetapkan? Ia dalam fasa pemulaan, yang akan diperkenalkan secara terperinci kemudian." kelas, antara muka, medan dan kaedah ke dalam rujukan langsung 》Rujukan simbolik: Gunakan satu set simbol untuk menerangkan sasaran yang dirujuk Rujukan terus; penunjuk terus ke sasaran
「执行类静态成员变量赋值语句和静态代码块中的语句」
我们把上面的Student代码改成如下形式
public class Student { private String name; private int age = 10; private static int gender = 1; { System.out.println("构造代码块"); } static { System.out.println("静态代码块"); } public Student() { System.out.println("构造函数"); } public String getName() { return this.name; } }
可以看到字节码中包含了3个方法,getName方法我们知道,7e51f00a783d7eb8f68358439dee7daf和583d030be372af71281df966e84181a5方法里面执行了哪些逻辑?从字节码的角度分析一波
「7e51f00a783d7eb8f68358439dee7daf方法」
从字节码可以看到7e51f00a783d7eb8f68358439dee7daf方法的主要逻辑为
「583d030be372af71281df966e84181a5方法」从字节码可以看到583d030be372af71281df966e84181a5方法的主要逻辑为
"Masih perlu memahami peranan kaedah 583d030be372af71281df966e84181a5 dan 7e51f00a783d7eb8f68358439dee7daf tentang blok kod statik, blok kod dibina dan terbina Susunan pelaksanaan fungsi "
Saya akan meringkaskan kesimpulan terus di sini. Anda boleh menulis demo untuk mengesahkannya
"Perintah pelaksanaan tanpa warisan"
"Perintah pelaksanaan dengan warisan"
Angka berikut adalah contoh saya ingin mengitar semula kelas Simple di kawasan kaedah
Anda boleh lihat Syarat untuk mengitar semula data jenis di kawasan kaedah agak keras, tetapi hasilnya adalah minimum, jadi sesetengah pengumpul sampah tidak akan mengitar semula data jenis di kawasan kaedah
Proses pemuatan kelas
Proses penugasan berubah
Atas ialah kandungan terperinci Penemuduga: Beritahu saya tentang proses pemuatan kelas (10 gambar rajah). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!