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.子类的构造方法中的其它语句
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.子类的构造方法中的其它语句
相关文章推荐
- Java代码块和构造方法执行顺序问题
- java静态/动态成员变量、初始化块,父类/子类构造函数执行顺序问题
- java 面试题三十三 子类父类方法执行顺序的问题
- java 多线程Callable和Runable执行顺序问题详解
- java构造代码块执行顺序问题
- Java中for循环中执行顺序问题及break, continue用法
- js中与Java代码及ajax的执行顺序问题
- java Socket编程 服务器和客户端执行的顺序问题
- 又一波 有关 java 静态代码块 代码块 构造函数执行顺序问题
- 学习总结:java面试方法重写详解,静态代码块和构造方法执行顺序问题
- Java中构造函数执行顺序的问题
- java中try中return语句与finally块执行顺序问题
- Java中构造函数、构造代码块、静态代码块等的执行顺序问题
- 关于Java中静态属性和静态代码块的执行顺序问题
- Java类被加载时执行的顺序问题
- java静态/动态成员变量、初始化块,父类/子类构造函数执行顺序问题
- java中try{}catch{}和finally{}的执行顺序问题
- Java____赋值顺序,调用顺序,内部类衍生问题:赋值和构造器、代码块谁先执行?+4种代码块
- 【Java】try、catch、finally的执行顺序与返回值问题
- java中try{}catch{}和finally{}的执行顺序问题