Java Object 构造方法的执行顺序
2016-08-27 01:08
295 查看
Java Object 构造方法的执行顺序
@author ixenos为了使用类而做的准备工作包括三个步骤
1)加载:类加载器查找字节码(一般在classpath中找),从字节码创建一个Class对象2)链接:验证字节码,为静态域(只是static修饰的域,不包含static final )分配存储空间,解析此类对其他类的所有引用
3)初始化:若该类有超类,对其初始化,执行静态初始化器和静态初始化块。
类初始化时构造方法执行顺序
对于某一个子类时:(1)初始化对象的存储空间为零或null值;(子父类链接完毕,父类初始化完毕后)
(2)调用父类构造函数;无显式调用super(...)时,默认隐式调用super(),否则调用super(...)
(3)按顺序分别调用类成员变量(例如static int)和实例成员变量(例如int)的初始化表达式;
(4)调用本身构造函数。
public class Dollar extends Money{ Rmb r=new Rmb(); public Dollar(){ System.out.println("Dollar is construct!"); } public static void main(String[] args){ new Dollar(); } } class Money{ public Money(){ System.out.println("Money is construct"); } } class Rmb{ public Rmb(){ System.out.println("RMB is construct"); } } /* 输出结果: Money is construct RMB is construct Dollar is construct! */
实例化某一个类的对象的时,块和构造器的相对运行顺序
(1)父类静态块(2)子类静态块
(3)父类块
(4)父类构造器
(5)子类块
(6)子类构造器
public class Dog { public Dog() { System.out.println("Dog"); } static{ //静态块 System.out.println("super static block"); } { //普通块 System.out.println("super block"); } } public class Mastiff extends Dog { public Mastiff() { System.out.println("Mastiff"); } { System.out.println("block"); } static { System.out.println("static block"); } public static void main(String[] args){ Mastiff mastiff=new Mastiff(); //实例化一个对象 } } /* 输出结果: super static block static block super block Dog block Mastiff */
部分参考http://blog.sina.com.cn/s/blog_6caeccff0100q5wz.html
相关文章推荐
- Java继承中父类子类构造方法、静态代码块、非静态代码块的执行顺序
- java 静态块 非静态块 构造方法 执行顺序
- java 中的静态块 构造方法 等的执行顺序
- Java中“块”与构造方法的执行顺序
- Java静态代码块、构造代码块、构造方法的执行顺序
- 学习总结:java面试方法重写详解,静态代码块和构造方法执行顺序问题
- java静态代码块和构造方法执行顺序
- Java中构造方法的执行顺序
- java静态代码块和构造方法执行顺序
- 理解Java类中构造方法的执行顺序和变量初始化
- java 构造方法 与 初始化默认值执行顺序
- Java子父类间静态代码块、构造代码块、构造方法的执行顺序
- java静态代码块和构造方法执行顺序
- Java构造方法的执行顺序
- 【转】java静态代码块和构造方法执行顺序
- Java 成员变量 静态块 构造块 构造方法执行顺序测试
- java静态代码块、初始化块和构造方法的执行顺序
- java静态代码块、初始化块和构造方法的执行顺序
- 关于java中子类,父类中,静态代码块: staic{},动态代码块:{},构造方法,类属性,对象属性等执行顺序做个总结:
- java静态代码块、初始化块和构造方法的执行顺序解析