Bolehkah objek statik yang tidak segera juga memanggil kaedah bukan statik dalam kelas?
为情所困
为情所困 2017-05-17 10:07:52
0
5
615

Terdapat kod yang sangat biasa: System.out.println Ini adalah pernyataan keluaran yang sangat biasa, tetapi selepas mengkajinya seketika, saya tiba-tiba teringat untuk melihat kod sumber:

public final static PrintStream out = null;

out ditakrifkan di bawah kelas Sistem dan belum dijadikan instantiated hanya pembolehubah nol Ia tidak boleh dipanggil objek statik, tetapi ia boleh memanggil kaedah println() di bawah kelas PrintStream. Sudah? Boleh saya tanya kenapa?

为情所困
为情所困

membalas semua(5)
我想大声告诉你

Penjelasan terperinci: Versi Cina http://www.cnblogs.com/skywan...
Versi Bahasa Inggeris berdasarkan jdk7 https://luckytoilet.wordpress...

滿天的星座

Yang dihormati, pertama sekali, apabila anda memulakan kelas ujian anda, iaitu apabila anda membuat instantiate kelas ujian anda, semua kelas statik yang anda panggil akan dijadikan instantiated terlebih dahulu, jadi sebenarnya, apabila anda melaksanakan pernyataan System.out.println, Kaedah dan sifat dalam kelas Sistem telah dimulakan!

仅有的幸福

statik {

    registerNatives();

}
Anotasi kaedah statik di atas mengatakan bahawa kaedah initializeSystemClass akan dipanggil untuk pemulaan SetOut0(newPrintStream(fdOut, props.getProperty("sun.stdout.encoding")) dalam kaedah ini harus menetapkan nilai untuk keluar,
private statik native void setOut0(PrintStream out) ialah kaedah asli;

Peter_Zhu

Apabila saya melihat statik terakhir, reaksi pertama saya sepatutnya bahawa ini adalah pemalar mesti dimulakan, dan kemudian saya mencarinya,
#🎜. 🎜 # Dia memanggil kaedah tempatan untuk memulakan
;

给我你的怀抱

Nah, kerja permulaan yang dilakukan dalam fungsi initializeSystemClass() dipanggil selepas urutan sistem dimulakan Dalam erti kata lain, semua pembolehubah ahli statik (err out in) dimulakan dalam fungsi ini
Sebagai contoh, nyatakan ini: FileOutputStream fdOut = new FileOutputStream(FileDescriptor.out);
setOut0(newPrintStream(fdOut, props.getProperty("sun.stdout.encoding")));
Fungsi setOut0() berada dalam lapisan asli , wujudkan sambungan antara objek yang dimulakan dan ini keluar dalam lapisan asli

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!