您的位置:首页 > 移动开发 > Objective-C

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: