闲暇之余,总结并撸码测试了一下静态代码块、构造代码块、构造方法的执行顺序及需要注意的问题
当然,首先大家得知道静态代码块是跟着类的加载而加载的,而构造代码块和构造方法是随着对象的加载而加载的,相比这个问题大家都已经很熟悉了。
以下是测试用的一个小Demo,便于更清楚的说明事实:
package com.test;
public class Test {
private int number=0;
//静态代码块
static{
System.out.println("静态代码块执行!");
}
//构造代码块
{
System.out.println("构造代码块执行!");
number=1;
}
//构造方法
public Test(){
System.out.println("构造方法执行!");
System.out.println(number);
}
public static void main(String[] args) {
new Test();
}
}
最终输出为:
静态代码块执行!
构造代码块执行!
构造方法执行!
1
以上Demo可以很清楚看出这三个代码块的执行顺序,可以这样理解,静态代码块在类加载的时候就执行了,不论你是否new了对象,而构造代码块和构造方法是必须在创建该类的对象时才会执行,且执行顺序是 构造代码块->构造方法 ,这样子,你就可以在构造代码块中做一些需要再构造方法之前做的事儿了。
若类存在继承问题,而恰好两个类中都有这三种代码块,那么执行顺序将会是先执行父类的静态代码块,再执行子类的静态代码块,然后执行父类的构造代码块,执行父类的构造方法,再执行子类的构造代码块,执行子类的构造方法。
不知道我表述的够明白不,把大家绕晕了没有。这里总结一下吧!
总结:静态的是与类有关,会先加载,而构造代码块是会在对象初始化时执行,然后再执行构造方法,除非构造方法中含有this()或者super(),若有,则构造代码块将会在this()或者super()之后执行,然后再执行构造方法的方法体;
以上都是个人总结,若有错误之处,欢迎各位大神提出指正!
推荐大家一个Java的学习网站:Java知识学习网,Java资料下载,Java学习路线图,网址:https://www.java1010.com