public class Father {
public Father(){
System.out.println("这是父类的构造器!");
}
{
System.out.println("这是父类的实例代码快!");
}
static {
System.out.println("这是父类的静态代码快!");
}
}
public class Son extends Father {
public Son(){
System.out.println("这是子类的构造器!");
}
{
System.out.println("这是子类的实例代码快!");
}
static {
System.out.println("这是子类的静态代码快!");
}
public static void main(String[] args) {
new Son();
}
}
运行结果:
这是父类的静态代码块!
这是子类的静态代码块!
这是父类的实例代码块!
这是父类的构造器!
这是子类的实例代码块!
这是子类的构造器!
Son s = new Son();
静态代码块,类被加载到被加载到内存时执行(即 Son s 执行时)
实例代码块、构造器,new 一个对象时才会执行
上面的代码反编译后,实例代码块会被放在构造器的第一行!!!
public class Father {
public Father(){
System.out.println("这是父类的实例代码快!");
System.out.println("这是父类的构造器!");
}
static {
System.out.println("这是父类的静态代码快!");
}
}
public class Son extends Father {
public Son(){
System.out.println("这是子类的实例代码快!");
System.out.println("这是子类的构造器!");
}
static {
System.out.println("这是子类的静态代码快!");
}
public static void main(String[] args) {
new Son();
}
}