首页 > 代码库 > (转)面试题--JAVA中静态块、静态变量加载顺序详解
(转)面试题--JAVA中静态块、静态变量加载顺序详解
1 public class Test { //1.第一步,准备加载类 2 3 public static void main(String[] args) { 4 new Test(); //4.第四步,new一个类,但在new之前要处理匿名代码块 5 } 6 7 static int num = 4; //2.第二步,静态变量和静态代码块的加载顺序由编写先后决定 8 9 { 10 num += 3; 11 System.out.println("b"); //5.第五步,按照顺序加载匿名代码块,代码块中有打印 12 } 13 14 int a = 5; //6.第六步,按照顺序加载变量 15 16 { // 成员变量第三个 17 System.out.println("c"); //7.第七步,按照顺序打印c 18 } 19 20 Test() { // 类的构造函数,第四个加载 21 System.out.println("d"); //8.第八步,最后加载构造函数,完成对象的建立 22 } 23 24 static { // 3.第三步,静态块,然后执行静态代码块,因为有输出,故打印a 25 System.out.println("a"); 26 } 27 28 static void run() // 静态方法,调用的时候才加载// 注意看,e没有加载 29 { 30 System.out.println("e"); 31 } 32 }
输出:abcd
一般顺序:静态块(静态变量)——>成员变量——>代码块——>构造方法——>静态方法
1、静态代码块(只加载一次) 2、构造方法(创建一个实例就加载一次)3、静态方法需要调用才会执行,所以最后结果没有e
1 public class Print { 2 3 public Print(String s){ 4 System.out.print(s + " "); 5 } 6 }
1 public class Parent{ 2 3 public static Print obj1 = new Print("1"); 4 5 public Print obj2 = new Print("2"); 6 7 public static Print obj3 = new Print("3"); 8 9 static{ 10 new Print("4"); 11 } 12 13 public static Print obj4 = new Print("5"); 14 15 public Print obj5 = new Print("6"); 16 17 public Parent(){ 18 new Print("7"); 19 } 20 21 }
1 public class Child extends Parent{ 2 3 static{ 4 new Print("a"); 5 } 6 7 public static Print obj1 = new Print("b"); 8 9 public Print obj2 = new Print("c"); 10 11 public Child (){ 12 new Print("d"); 13 } 14 15 public static Print obj3 = new Print("e"); 16 17 public Print obj4 = new Print("f"); 18 19 public static void main(String [] args){ 20 Parent obj1 = new Child (); 21 Parent obj2 = new Child (); 22 } 23 }
执行main方法,程序输出顺序为: 1 3 4 5 a b e 2 6 7 c f d 2 6 7 c f d
输出结果表明,程序的执行顺序为:
如果类还没有被加载:
1、先执行父类的静态代码块和静态变量初始化,并且静态代码块和静态变量的执行顺序只跟代码中出现的顺序有关。
2、执行子类的静态代码块和静态变量初始化。
3、执行父类的实例变量初始化
4、执行父类的构造函数
5、执行子类的实例变量初始化
6、执行子类的构造函数
如果类已经被加载:
则静态代码块和静态变量就不用重复执行,再创建类对象时,只执行与实例相关的变量初始化和构造方法。
(转)面试题--JAVA中静态块、静态变量加载顺序详解
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。