A类:
public class A {
static int i=9; static { i++; System.out.println("A的静态类型"+i); } { i++; System.out.println("A的非静态"+i); } public A(){ i++; System.out.println("A的无参构造方法"+i); } public A(String Astr){ System.out.println("A的有参构造方法"); } }
继承A的B类:
public class B extends A{
static int i=9;
static { i++; System.out.println("B的静态类型"+i); } { i++; System.out.println("B的非静态"+i); } public B(){ i++; System.out.println("B的无参构造方法"+i); } public B(String Bstr){ System.out.println("B的有参构造方法"); } }测试代码:
new B();
System.out.println(B.i); System.out.println(A.i);测试结果:
A的静态类型10
B的静态类型10 A的非静态11 A的无参构造方法12 B的非静态11 B的无参构造方法12 12 12
类的执行顺序
单类: 1) 执行static的代码块和static的成员变量 2) 执行非static的代码块和非static的成员变量 3)执行构造方法父子类:
1) 执行父类的static的代码块和static的成员变量 2) 执行子类的static的代码块和static的成员变量 3) 执行父类非static的代码块和非static的成员变量 4)执行父类的构造方法 5) 执行子类非static的代码块和非static的成员变量 6)执行子类的构造方法
静态块:用static声明,Jvm加载类时执行并只执行一次;