在单独的类中:
静态代码块,使用类的时候就直接执行了
构造代码块,相比于静态代码块,缺少了static,一旦构造函数要运行,就在构造函数前运行
构造函数,初始化的时候,就会运行
如果存在子类和父类:
父类静态 -> 子类静态 –> 父类构造代码 -> 父类构造函数 -> 子类构造代码 -> 子类构造函数
代码如下:
父类:
public class Parent {
private static String hello = "hello";
public String world = "world";
{ //构造代码块
System.out.println("3 Parent的构造代码块");
}
public Parent() {
System.out.println("4 Parent的构造方法代码块");
}
static {//静态代码块
System.out.println("1 Parent的构造方法代码块的静态代码块");
}
}
子类:
public class Son extends Parent {
private static String hello = "hello";
public String world = "world";
{ //构造代码块
System.out.println("5 Son的构造代码块");
}
public Son() {
// super放在构造的第一行,只要调用构造函数就会在构造代码块前运行。如果父类没有参数且只有默认的,super可以不写,系统自动补上
super();
System.out.println("6 Son的构造方法代码块");
}
static {//静态代码块
System.out.println("2 Son的构造方法代码块的静态代码块");
}
public void print() {
System.out.println("hello world");
}
public static void main(String[] args) {
Son son = new Son();
son.print();
}
}