Given: 
10. public class Foo { 
11. static int[] a; 
12. static { a[0]=2; } 
13. public static void main( String[] args) {} 
14. } 
Which exception or error will be thrown when a programmer attempts 
to run this code? 
A. java.lang. StackOverflowError 
B. java.lang.IllegalStateException 
C. java.lang.ExceptionlnlnitializerError 
D. java.lang.ArraylndexOutOfBoundsException 
Answer: C 
为什么会是C呢???

解决方案 »

  1.   

    java.lang.ExceptionInInitializerError静态初始化程序中发生意外异常的信号。抛出 ExceptionInInitializerError 表明在计算静态初始值或静态变量的初始值期间发生异常。 代码在初始化执行static { a[0]=2; } 时因为int数组变量a没有初始化会抛出该异常
      

  2.   

    基本上都说了。。
    防止发生做错,可以给他初始化
    例如:
    static int[] a = {0,0,0}; 
      

  3.   

    个人认为跟类加载的顺序有关
    当我们用new关键字生成一个对象时,虚拟机会首先进行该类的静态初始化(包括静态变量和静态块),然后把所有的实例变量初始化为默认值(是 0,false,null之类的,不是程序中给的值),第三步是吧所有的实例变量赋值为程序中给的值,再然后是执行构造函数。你的程序中
    static int[] a; 
    static { a[0]=2; }
    a在是null时就给赋值了,所以会产生异常,就是ExceptionlnlnitializerError
      

  4.   

    int [] a=new int[size]
    java.lang.ExceptionInInitializerError静态初始化程序中发生意外异常的信号。抛出 ExceptionInInitializerError 表明在计算静态初始值或静态变量的初始值期间发生异常。 代码在初始化执行static { a[0]=2; } 时因为int数组变量a没有初始化会抛出该异常
      

  5.   

    数据加载·错误·java.lang.ExceptionInInitializerError静态初始化程序中发生意外异常的信号。抛出 ExceptionInInitializerError 表明在计算静态初始值或静态变量的初始值期间发生异常。 代码在初始化执行static { a[0]=2; } 时因为int数组变量a没有初始化会抛出该异常