public class staticTest
{
private static String[] tests = null;//(1)
private static staticTest instance = new staticTest();
//private static String[] tests = null;//(2)
private staticTest(){
init();
}
private void init(){
tests = new String[8];
for (int i = 0; i < tests.length; i++){
tests[i] = "test" + i;
}
}
public void print(){
for (int i = 0; i < tests.length; i++){
System.out.println(tests[i]);// = "test"+i;
}
}
public static staticTest getInstance(){
return instance;
}
public static void main(String[] args) throws Exception{
staticTest.getInstance().print();
}
}
该类测试static关键字对类初始化影响,如果把位于(1)的代码放到(2)的位置,则该类执行main方法时会报错----空指针异常:
原因在哪里呢?
static 定义的成员变量是按定义的位置初始化的,尽管在staticTest的构造函数中tests 被初始化,但由于(2)语句定义的位置,有使得tests 的值为null.