父类
public class Super {
static {
System.out.println("Super static代码块...");
}
{
System.out.println("Super 普通代码块...");
}
public Super() {
System.out.println("Super 无参构造方法...");
}
public Super(int a) {
System.out.println("Sub 有参构造方法..." + a);
}
}
子类
public class Sub extends Super {
static {
System.out.println("Sub static代码块...");
}
{
System.out.println("Sub 普通代码块...");
}
public Sub() {
System.out.println("Sub 无参构造方法...");
}
public Sub(int a) {
System.out.println("Sub 有参构造方法..." + a);
}
}
主类
public class ExtendTest {
static {
System.out.println("主类static代码块...");
}
{
System.out.println("主类普通代码块...");
}
public ExtendTest() {
System.out.println("主类构造方法...");
}
public static void main(String[] args) {
Super b = new Sub(5);
System.out.println("---------------");
System.out.println("main方法中的函数1");
{
System.out.println("main方法中的普通代码块1");
}
System.out.println("main方法中的函数2");
{
System.out.println("main方法中的普通代码块2");
}
}
}
结果
主类static代码块...
Super static代码块...
Sub static代码块...
Super 普通代码块...
Super 无参构造方法...
Sub 普通代码块...
Sub 有参构造方法...5
---------------
main方法中的函数1
main方法中的普通代码块1
main方法中的函数2
main方法中的普通代码块2
Java中类加载执行顺序是:
主类中的静态代码块
父类中的静态成员和静态代码块
子类中的静态成员和静态代码块
父类中的成员变量和普通代码块
父类中的构造方法
子类中的成员变量和普通代码块
子类构造方法