针对非静态代码块的调用时机进行分享:非静态代码块在构造方法中执行,因此每次new对象都会执行一次。
以下是证明:
Java代码:
public class Sun{
String name;
{
System.out.println("非static代码块1");
}
static {
System.out.println("static代码块");
}
public Sun() {
System.out.println("无参构造器");
}
public Sun(String name) {
this.name = name;
System.out.println("有参构造器");
}
{
System.out.println("非static代码块2");
}
}
class文件:
public class Sun {
String name;
public Sun() {
System.out.println("非static代码块1");//非static代码块放在我们写的代码前面
System.out.println("非static代码块2");
System.out.println("无参构造器");
}
public Sun(String name) {
System.out.println("非static代码块1");//有参构造也会有
System.out.println("非static代码块2");
this.name = name;
System.out.println("有参构造器");
}
static {
System.out.println("static代码块");
}
}
由编译后的class文件可以很清楚的确定执行的时机