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.