static 加载

  1. import java.util.Arrays;   
  2. public class AA {  
  3.  private static int[] a = new int[4];   
  4.  private static AA aa = new AA();  
  5.  boolean[] flag =new boolean[5];  
  6.  private static char[] ad = new char[4];  
  7.  private AA(){//构造方法   
  8.      init();  
  9.  }   
  10.  public static AA getAA(){//得到单态实例   
  11.      return aa;  
  12.  }  
  13.  public void init(){  
  14.     Arrays.fill(a, 1);//此处不会出错   
  15.      Arrays.fill(flag, true);//此处也不会出错,用作对比   
  16.      Arrays.fill(ad,'d');//此处将会出错   
  17.      System.out.println(a[0]);   
  18.   } /** * @param args */   
  19.  public static void main(String[] args) {  
  20.  }   
  21. }  

a,aa,ad都是静态的,在类加载的时候,会按顺序给他们创建空间, 
a创建了4个int,到了aa,aa是个自定义的对象,调用其无参构造方法,然后,在调用init()前 
JVM会先初始化类中非静态属性flag,为flag创建了5个boolean,然后调用其init(), 
而在init()中你调用了未初始化的ad,ad此时为空,异常就出来了。

猜你喜欢

转载自lf6627926.iteye.com/blog/2005663
今日推荐