public class StaticTest {
public static int k = 0;
public static StaticTest t1 = new StaticTest("t1");
public static StaticTest t2 = new StaticTest("t2");
public static int i = print("i");
public static int n = 99;
public int j = print("j");
{
print("構造塊");
}
static {
print("靜態塊");
}
public StaticTest(String str) {
System.out.println((++k) + ":" + str + " i=" + i + " n=" + n + " this:" + this);
++n;
++i;
}
public static int print(String str) {
System.out.println((++k) + ":" + str + " i=" + i + " n=" + n);
++i;
return ++n;
}
public static void main(String[] args) {
new StaticTest("init");
}
}
源代碼的靜態塊如上述,我知道類的加載順序,這是靜態變量>>代碼的靜態塊>>成員變量>> >>碼構造方法的構造塊。什麼我感到困惑的是,當爲什麼在加載這種類型的靜態變量不需要調用代碼
公共靜態StaticTest T1 =新StaticTest( 「T1」);
執行時,爲什麼的碼中的靜態塊(
靜態{ 打印( 「靜態塊」); }
)不運行,但
public int j = print(「j」);
跑?它發生了什麼?我希望你能告訴我一些事情,我會很感激的。
靜態變量被初始化,所以在構造將要運行。你期望會發生什麼? – Kayaman
你可以簡化*這段代碼來明確你想要展示的一件事,並且指定你看到的確切輸出嗎? – David
你確定你在這裏發佈的確切代碼實際編譯了嗎? –