Dapatkan strim binari kelas melalui nama kelas penuh
Uraikan aliran binari kelas ke dalam struktur data dalam kawasan kaedahBuat instance kelas java.lang.Class untuk mewakili jenis, sebagai kawasan kaedah Masuk akses kelas
"Terdapat banyak cara untuk mendapatkan aliran binari kelas melalui nama kelas penuh"
Dapatkan dari pakej zip
Dapatkannya daripada rangkaian
Penjanaan pengiraan masa jalan, seperti teknologi proksi dinamik
...
"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"
Pautan
"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"
Nilai lalai jenis data biasa adalah seperti berikut
Jenis data
Nilai lalai
bait
(bait)0
short
short
int
0
panjang
0L
float
0.0f
double
0.0d
boolean
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 ?
Pembolehubah statik kelas ialah jenis data asas, dan diubah suai oleh muktamad
Pembolehubah statik kelas ialah jenis Rentetan, diubah suai secara muktamad, dan diberi nilai dalam bentuk literal
untuk memudahkan melihat bait kod fail Kelas, saya memuat turun pemapar jclasslib Bytecode pemalam dalam IDEA, yang sangat mudah. Gunakan kod berikut untuk mengesahkannya dalam bentuk bytecode
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");
}
Salin selepas log masuk
"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
Sertai saya dan tulis kelas seperti berikut
public class Student {
private String name;
private int age;
public String getName() {
return this.name;
}
}
Salin selepas log masuk
Mengambil medan sebagai contoh, objek yang sepadan dengan nama dan umur tidak menunjuk terus ke alamat memori, tetapi diterangkan dengan rentetan ( iaitu rujukan simbolik). Peringkat penghuraian adalah untuk menukar huraian ini kepada penunjuk yang terus menunjuk ke sasaran (iaitu rujukan langsung)
初始化
「执行类静态成员变量赋值语句和静态代码块中的语句」
我们把上面的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;
}
}
Satu perkara yang perlu diberi perhatian ialah "Mesin maya Java memastikan bahawa sebelum kaedah subclass dilaksanakan, kaedah kelas induk telah dilaksanakan"
"Masih perlu memahami peranan kaedah dan 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"
.
Blok kod statik dan pembolehubah ahli statik, perintah pelaksanaan diberikan oleh Perintah penulisan menentukan (ia hanya akan dilaksanakan sekali)
Bina blok kod dan pembolehubah ahli bukan statik, susunan pelaksanaan ditentukan oleh susunan penulisan
Pembina
"Perintah pelaksanaan dengan warisan"
Statik (blok kod statik, pembolehubah ahli statik) bagi kelas kod induk, statik (blok kod ahli statik) statik (blok kod ahli statik) hanya akan dilaksanakan sekali)
Bukan statik (blok kod terbina) kelas induk , pembolehubah ahli bukan statik), pembina kelas induk
bukan statik (blok kod pembinaan, bukan -pembolehubah ahli statik) subkelas, pembina subkelas
nyahpasang
Pengumpulan sampah bukan sahaja berlaku di timbunan, tetapi juga di kawasan kaedah. Walau bagaimanapun, syarat untuk mengitar semula data jenis di kawasan kaedah adalah agak ketat
Angka berikut adalah contoh saya ingin mengitar semula kelas Simple di kawasan kaedah
Anda perlu memastikan bahawa kelas Sample dan subkelasnya dalam timbunan telah dikitar semula
MyClassLoader yang memuatkan kelas Sample telah dikitar semula
Objek Kelas yang sepadan dengan Sampel telah dikitar semula
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
Ringkasan
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!
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn