[メモ]Static初期化に関する小さな記憶
4520 ワード
Q 1:次のコードを見て、出力結果を分析しますか?
A:
Thinking:スタティックコードブロックはコンストラクタより先に実行されます.
Q 2:下記のコードを見て、出力結果を分析しますか?
A:
Q:次のコードを見て、出力結果を分析しますか?
A:
Thinking:静的コードブロックは順番に実行されます.
Q 3:下記のコードを見て、出力結果を分析しますか?
A:
Thinking:スタティックコードブロックはクラスロード時に一度だけ初期化され、その後は実行されません.
まとめ:static修飾の変数は、コンストラクタの前(クラスがstatic修飾でない限りQ 1のように)に順次初期化され、1回のみロードされます.
tip:筆者の経験は非常に限られていますが、間違いや説明が間違っている場合は、軽く噴き出してください....
public class Test {
static {
System.out.println("static");//-----1
}
public Test() {
System.out.println("Test");//-----2
}
public static void main(String[] args) {
Test test = new Test();
}
}
A:
static
Test
Thinking:スタティックコードブロックはコンストラクタより先に実行されます.
Q 2:下記のコードを見て、出力結果を分析しますか?
public class Test {
static Test test1 = new Test();//-----1
static {
System.out.println("static");//-----2
}
public Test() {//-----3
System.out.println("Test");
}
public static void main(String[] args) {
Test test1 = new Test();
}
}
A:
Test
static
Test
Q:次のコードを見て、出力結果を分析しますか?
public class Test {
static {
System.out.println("static");//-----1
}
public Test() {//-----3
System.out.println("Test");
}
public static void main(String[] args) {
Test test1 = new Test();
}
static Test test1 = new Test();//-----2
}
A:
static
Test
Test
Thinking:静的コードブロックは順番に実行されます.
Q 3:下記のコードを見て、出力結果を分析しますか?
public class Test {
static {
System.out.println("static");//-----1
}
public Test() {//------3,4
System.out.println("Test");
}
public static void main(String[] args) {
Test test1 = new Test();
Test test2 = new Test();
}
static Test test1 = new Test();//-----2
}
A:
static
Test
Test
Test
Thinking:スタティックコードブロックはクラスロード時に一度だけ初期化され、その後は実行されません.
まとめ:static修飾の変数は、コンストラクタの前(クラスがstatic修飾でない限りQ 1のように)に順次初期化され、1回のみロードされます.
tip:筆者の経験は非常に限られていますが、間違いや説明が間違っている場合は、軽く噴き出してください....