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

Java 构造器/静态代码块/构造代码块执行顺序

2018-03-30 23:23 363 查看
今天去面试了一家公司,做了一套题,其中有一道题自己感觉知识点并没有掌握,所以面试回来后自己手写了一下,发现笔试题全写错了!
代码如下class A {
public A(){
System.out.println("A 构造器!");
}
{System.out.println("A 构造代码块!");}
static{
System.out.println("A 静态代码块!");
}
}
public class B extends A{
public B(){
System.out.println("B 构造器!");
}
{System.out.println("B 构造代码块!");}
static{
System.out.println("B 静态代码块!");
}

public static void main(String[] args){
B b1 = new B();
B b2 = new B();
}
}

代码的执行结果为:A 静态代码块!
B 静态代码块!
A 构造代码块!
A 构造器!
B 构造代码块!
B 构造器!
A 构造代码块!
A 构造器!
B 构造代码块!
B 构造器第一次执行的顺序为父类静态代码块>子类静态代码块>父类构造代码块>父类构造器>子类构造代码块>子类构造器;
第二次执行顺序为父类构造代码块>父类构造器>子类构造代码块>子类构造器;
因为静态代码块只加载一次,之后就不再继续加载,原因为:静态代码块是属于整个类的,并不是属于某个对象的,所以只加载一次;而构造代码块和构造方法是属于对象的,每次new一个对象就会被重新实例化一次,且构造代码块的执行顺序先于构造方法,原因为构造代码块初始化的是给所有对象初始化,而构造器是初始化对应的对象。

看来还是需要加强基础啊。
参考文章:https://blog.csdn.net/xingzhemoluo/article/details/39997325
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java Java SE