java中类初始化时机

来源:互联网 发布:java rmi原理 编辑:程序博客网 时间:2024/06/05 03:18

很多人会迷惑,Java中类什么时候初始化:


1.创建类的实例。当然这就包括三种方式:(1):通过new来创建(2):通过反射来创建(3):通过反序列化来创建

2.调用该类的静态方法

3.调用该类的静态属性,这里需要注意,如果该静态属性是一个final类型,并且在编译阶段就能确定下来,那么该类也将不会初始化,后面将会给出例子

4.初始化该类的子类

5.运行该类,也就是说该类中有main方法


下面给出第三点的例子:

class MyTest{
static{
System.out.println("static do");
}
static final String str="hello rihui";

//如果换成下面这个那么将会把MyTest初始化,因为在编译阶段不能确定下str的值
//static final String str="hello rihui"+System.currentTimeMillis();
}
public class TestStaticFinal {
public static void main(String[] args){
//运行结果只打印了 hello rihui
//说明MyTest类还没有被初始化
//因为在编译的时候,发现str是static final的,并且它的值可以在编译阶段就可以确定下来,因此会把
//str当作“宏变量来处理”,直接将MyTest.str替换成了hello rihui
//因此并不会初始化MyTest类
System.out.println(MyTest.str);
}
}