- class A {
- public A() {
- System.out.println("class A");
- }
- { System.out.println("I'm A class"); }
- static { System.out.println("class A static"); }
- }
- public class B extends A {
- public B() {
- System.out.println("class B");
- }
- { System.out.println("I'm B class"); }
- static { System.out.println("class B static"); }
-
- public static void main(String[] args) {
- new B();
class A static class B static I'm A class class A I'm B class class B
当new 一个对象时
如果有静态代码块
系统会自动的帮你最先执行静态代码块
如果A继承了B 并且A,B都有静态代码块
当你new A()时,
系统会自动的先去执行B的静态代码块在执行A的静态代码块
然后假设B还有构造代码块,那么再执行完A,B的静态代码块后
会再去执行B的构造代码块,然后在执行B的构造方法
然后在执行A的构造代码块,然后在执行A的构造方法