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
代码如下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面试方法重写详解,静态代码块和构造方法执行顺序问题
- JAVA中静态代码块、构造方法、Super()父类与子类之间执行顺序
- java静态代码块和构造方法执行顺序
- java静态代码块、初始化块和构造方法的执行顺序
- Java static属性和静态代码块和构造方法等的执行顺序探讨
- java静态代码块和构造方法执行顺序
- 【转】java静态代码块和构造方法执行顺序
- Java静态代码块、构造代码块、构造方法的执行顺序
- Java知识积累——静态代码块,非静态代码块,构造器的执行顺序和次数
- java静态代码块、初始化块和构造方法的执行顺序
- Java 父类,子类各自均有构造器和静态代码块 执行的顺序
- java静态代码块、初始化块和构造方法的执行顺序
- Java静态代码块和构造方法执行顺序
- java 静态代码块和构造方法的执行先后顺序
- java中静态代码块和构造方法执行顺序
- Java中关于静态代码块,非静态代码块,构造方法,静态方法,一般方法执行顺序
- java中父类和子类中的静态代码块、非静态代码块和构造器的执行顺序
- java:普通代码块,构造代码块,静态代码块区别及其执行顺序
- java静态代码块、构造方法、构造块的执行顺序