public class TestStatic9{
public static void main(String[] args){
B bb = new B();
}
}
class A{
public A(){
System.out.println("A类构造1");//1
}
{
System.out.println("A类普通代码块2");//2
}
static{
System.out.println("A类静态代码块3");//3
}
}
class B extends A{
public B(){
System.out.println("B类构造方法4");//4
}
{
System.out.println("B类的普通代码块5");//5
}
static{
System.out.println("B类静态代码块6");//6
}
public static void main(String[] args){
B bb = new B();
}
}
class A{
public A(){
System.out.println("A类构造1");//1
}
{
System.out.println("A类普通代码块2");//2
}
static{
System.out.println("A类静态代码块3");//3
}
}
class B extends A{
public B(){
System.out.println("B类构造方法4");//4
}
{
System.out.println("B类的普通代码块5");//5
}
static{
System.out.println("B类静态代码块6");//6
}
}
当main方法里面执行会首先碰到B类,这时计算机不知道B是什么,需要通过classpath环境变量找到B.class文件,找到后发现B类是A类的子类,这时候先不加载B类,计算机需要再通过classpath找到父类A,发现A类又是Object类的子类,紧接着再找到最顶层的父类之后从最顶层的类开始加载。Object.class-》A.class-》B.class。其中当类在第一次加载的时候会执行静态代码块里的代码。,当在创建类的对象的时候会执行普通代码块里的代码,普通代码块里的执行完以后会执行构造方法。
首先要明确