什麼時候會發生類初始化:
1)new的時候
2)使用反射的時候
3)當初始化一個類,如果其父類沒有被初始化,則先會初始化它的父類
測試:
1 package reflection;
2
3
4 import org.w3c.dom.ls.LSOutput;
5
6 import java.nio.file.FileSystemAlreadyExistsException;
7
8 // 測試類聲明時候會初始化
9 public class Test06 {
10 static {
11 System.out.println("Main類被加載");
12 }
13 public static void main(String[] args) {
14 Son son = new Son();
15 }
16
17 }
18
19 class Father {
20 static int b = 2;
21 static {
22 System.out.println("父類被加載");
23 }
24 }
25
26 class Son extends Father {
27 static {
28 System.out.println("子類被加載");
29 m = 300;
30 }
31
32 static int m = 100;
33 static final int M = 1;
34
結果:
Main類被加載
父類被加載
子類被加載
1
結果:
Main類被加載
父類被加載
子類被加載
不會發生類初始化情況:
1)子類去調用父類的靜态變量,不會導緻子類初始化
1
結果:
Main類被加載
父類被加載
2
2)通過數組定義類引用,不會觸發此類的初始化
1 Son[] sons = new
結果:
Main類被加載
3)引用常量不會觸發此類的初始化(常量在連結階段就存入調用類的常量池中了)
1