类的初始化格式:static{<--系列语句>}
当java程序运行时,需要某个类,但该类还没有装入内存,则java将类装入内存,然后立即执行类中定义的类初始化块,执行次序就是类初始化块定义的次序。
public class Test{
static {System.out.println("Hello");}
}
程序运行的结果如下:
Hello
Exception in thread "main"java.lang.NoSuchMethosError:main
对象的初始化格式:{<--系列语句>}
当java程序运行时,需要某个类,但该类还没有装入内存,则java将类装入内存,然后立即执行类中定义的类初始化块,执行次序就是类初始化块定义的次序,然后执行对象初始化块,执行次序是定义的次序,最后执行类的构造函数,继续对对象进行初始化。
class A{
public A(){System.out.println("A的构造函数");}
{System.out.println("A的动态初始化块");}
static {System.out.println("A的静态初始化块");}
}
class B extends A{
public B(){System.out.println("B的构造函数");}
{System.out.println("B的动态初始化块");}
static {System.out.println("B的静态初始化块");}
}
public class Test4{
public static void main(String[] args){
System.out.println("第一次生成类B的对象时输出:");
new B();
System.out.println("第二次生成类B的对象时输出:");
new B();
}
}
程序运行结果如下:
第一次生成类B的对象时输出:
A的静态初始化块
B的静态初始化块
A的动态初始化块
A的构造函数
B的动态初始化块
B的构造函数
第二次生成类B的对象时输出:
A的动态初始化块
A的构造函数
B的动态初始化块
B的构造函数