Sub类
- public class Sub extends Super {
- public static final int y = 2005;
- public static int z;
-
- static {
- System.out.println("Initialization Sub");
- }
- }
|
Super类
- public class Super {
- public static int x = 2006;
-
- static {
- System.out.println("Initialization Super");
- }
- }
|
输入结果
Initialization Main class 2005 Initialization Super 2006 Initialization Sub 0 |
从这个结果可以看到,
1)static块在类中会先执行;(实际上是先加载static成员变量,然后是static代码块)
2)static 的final变量不会引起类的初始化;
3)子类Sub引用父类Super里面的变量,就会引起父类的初始化,但不会引起子类的初始化;
4)static的成员变量也有默认值。
2、对象的创建(creation of new class instances)
看例子来说明:
InitializationOrder类
- public class InitializationOrder {
- public static void main(String[] args) {
- SubClass sb = new SubClass();
- }
- }
|
SuperClass类
- public class SuperClass{
- static {
- System.out.println("SuperClass static");
- }
-
- SuperClass(String str){
- System.out.println(str);
- }
- }
|
Interface类
- interface Interface{
- static SuperClass su = new SuperClass("Interface new SuperClass");
- }
|
SubClass类
- public class SubClass extends SuperClass implements Interface{
-
- static {
- System.out.println("SubClass static");
- }
-
- private SuperClass su = new SuperClass("initialization variable");
-
- SubClass() {
- super("super");
- new SuperClass("new SuperClass");
- }
- }
|