cari

Rumah  >  Soal Jawab  >  teks badan

Bolehkah objek statik yang tidak segera juga memanggil kaedah bukan statik dalam kelas?

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?

为情所困为情所困2774 hari yang lalu679

membalas semua(5)saya akan balas

  • 我想大声告诉你

    我想大声告诉你2017-05-17 10:09:52

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

    balas
    0
  • 滿天的星座

    滿天的星座2017-05-17 10:09:52

    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!

    balas
    0
  • 仅有的幸福

    仅有的幸福2017-05-17 10:09:52

    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;

    balas
    0
  • 天蓬老师

    天蓬老师2017-05-17 10:09:52

    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
    ;

    balas
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-17 10:09:52

    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

    balas
    0
  • Batalbalas