探究JAVA父类子类静态代码块、静态变量、构造方法的执行顺序
2015-11-04 16:13
218 查看
转载地址:http://www.tuicool.com/articles/N7ZFBr
执行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、执行子类的构造函数
如果类已经被加载:
则静态代码块和静态变量就不用重复执行,再创建类对象时,只执行与实例相关的变量初始化和构造方法。
执行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、执行子类的构造函数
如果类已经被加载:
则静态代码块和静态变量就不用重复执行,再创建类对象时,只执行与实例相关的变量初始化和构造方法。
1 public class Print { 2 3 public Print(String s){ 4 System.out.print(s + " "); 5 } 6 }
1 public class Test1 { 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 Test1(){ 18 new Print("7"); 19 } 20 21 }
1 public class Test2 extends Test1{ 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 Test2(){ 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 Test1 obj1 = new Test2(); 21 Test1 obj2 = new Test2(); 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、执行子类的构造函数
如果类已经被加载:
则静态代码块和静态变量就不用重复执行,再创建类对象时,只执行与实例相关的变量初始化和构造方法。
1 public class Print { 2 3 public Print(String s){ 4 System.out.print(s + " "); 5 } 6 }
1 public class Test1 { 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 Test1(){ 18 new Print("7"); 19 } 20 21 }
1 public class Test2 extends Test1{ 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 Test2(){ 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 Test1 obj1 = new Test2(); 21 Test1 obj2 = new Test2(); 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、执行子类的构造函数
如果类已经被加载:
则静态代码块和静态变量就不用重复执行,再创建类对象时,只执行与实例相关的变量初始化和构造方法。
相关文章推荐
- Struts2+Spring3+Hibernate框架技术
- Java 执行过程详解 - JVM 生命周期
- Java导出Excel三表头
- springmvc 返回汉字乱码
- 两种Eclipse部署动态web项目方法
- JDK安装与配置详细图文教程
- spring mvc 返回页面json数据一种做法
- 传智播客javase总结
- Java 并发编程实践---可重入锁
- Eclipse常用快捷键
- Java简单的客户端与服务器的建立与通信
- Java语法糖---伪泛型
- 【已解决】Eclipse for Android 出现Could not find SDK folder....问题解决
- Java图形用户界面——Swing概述
- 在java 中 cmd.startsWith("") 是什么意思
- [Gradle] 在 Eclipse 下利用 gradle 构建系统
- 如何使用javadoc
- Java提高篇
- JAVA 线程池
- Java中的常用类