请问关于 Java static 变量的问题?
ringa_lee
ringa_lee 2017-04-18 10:56:42
0
2
482
public class StaticTest {

    private static String a;
    private static String b = "this is " + a;

    public static void main(String[] args) {
        a = "test";
        // I think the result is this is test
        // but the result is this is null, why?

        System.out.println(b);
    }


    //
    //  我本以为输出结果是 this is test
    // 没想到输出结果为 this is null, 这是什么原因

}
ringa_lee
ringa_lee

ringa_lee

membalas semua(2)
巴扎黑

Pertama sekali, yang pertama: apabila anda mentakrifkan pembolehubah A, anda tidak menetapkan nilai awal, jadi A adalah NULL, dan kemudian anda mendapat B, yang secara semula jadi ini adalah nol
Kemudian yang kedua : public static void main, pengkompil ialah Apabila menyusun kod ini, a dan b pertama kali dirujuk oleh fungsi utama Jika anda menukar a, a akan ditukar, tetapi b akan tetap sama, dan ini akan sentiasa batal . Anda perlu memahami maksud proses menjalankan fungsi statik. B anda tidak ditetapkan secara dinamik, jadi sudah tentu apa yang anda dapat ialah b statik, dan ia tidak akan disusun secara dinamik.

黄舟

Ini adalah mengenai mekanisme permulaan kelas JVM Tiga proses menukar kod bait kepada objek yang sedang dijalankan ialah memuatkan, sambungan dan permulaan. . . Proses penyediaan sambungan akan memberikan nilai lalai nol, kerana StaticTest mempunyai kaedah utama, yang ditetapkan kepada kelas permulaan apabila JVM bermula. Ia akan melakukan panggilan aktif untuk memulakan kelas dan melaksanakan dua baris kod String statik peribadi a; String statik peribadi b = "ini ialah " + a;

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan