您的位置:首页 > 编程语言 > Java开发

java中的类的执行顺序问题

2017-04-13 09:31 155 查看
/* * java的执行顺序*/

public class A extends B{
static{
System.out.println("a");
}
public A(){
super();//可以显示或者隐士调用
System.out.println("b");
}

public static void main(String[] args) {
A a = new A();
}

}

class B extends C{
static{
System.out.println("c");
}
public B(){
System.out.println("d");
}

}

class C{
static{
System.out.println("e");
}
public C(){
System.out.println("f");
}

}

执行结果:

e

c

a

f

d

b

java类的执行顺序:

1.如果父类有静态成员赋值或者静态初始化块,执行静态成员赋值和静态初始化块

2.如果类有静态成员赋值或者静态初始化块,执行静态成员赋值和静态初始化块

3.将类的成员赋予初值(原始类型的成员的值为规定值,例如int型为0,float型为0.0f,boolean型为false;对象类型的初始值为null)

4.如果构造方法中存在this()调用(可以是其它带参数的this()调用)则执行之,执行完毕后进入第7步继续执行,如果没有this调用则进行下一步。(这个有可能存在递归调用其它的构造方法)

5.执行显式的super()调用(可以是其它带参数的super()调用)或者隐式的super()调用(缺省构造方法),此步骤又进入一个父类的构造过程并一直上推至Object对象的构造。

6.执行类申明中的成员赋值和初始化块。

7.执行构造方法中的其它语句。

 最终的简化顺序版本是:

1.父类的静态成员赋值和静态块

2.子类的静态成员和静态块

3.父类的构造方法

4.父类的成员赋值和初始化块

5.父类的构造方法中的其它语句

6.子类的成员赋值和初始化块

7.子类的构造方法中的其它语句
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息