感觉你代码有点乱..
A类为公开类,并有主方法体了,那B类继承了A类.B类中没有主方法.
你这样继承,那有什么意义呢? 因为A类自身就可以调用自身的成员,B类继承A类 就无意义了.
关于静态初始化块,是在运行public 类时执行的,
除开其他的不说,单说静态初始化块,可以说是看得见的最先执行.
1.主方法存在的类加载进内存,然后开始执行此类的最高级父类中的静态初始化块(如果有的话)
2.所以此类的所有父类中的静态初始化块全部执行完毕后,菜开始非静态初始化块.
因为,初始化块相当于 构造器的抽象,在通过new调用构造器时,不同形参的构造器如果存在相同
的执行体,那么就可以把它们放入初始化块中,优先于构造器先执行.
3.因为父类中也可能存在非静态的初始化块,所以所有类中的静态初始化块执行完毕后
那么就继续从该类的顶级父类中执行非静态初始化块,因为父类中的构造器运行顺序低于本类
初始化块,但高于子类初始化块.所以顶级父类的非静态初始化块执行完毕后,就直接执行该类中的构造器,
然后,向下开始依次以相同的方法执行..
4.如果,在主方法中new两个相同子类的对象,那么因为静态初始化块是在加载类时就完毕了,所以不会随着二次new对象来再次执行
但是,非静态初始化块和,构造器却会随着对象的创建再次执行..
写的有点多.. 应该还算详细吧. |