java中这些异常怎样才会出现

谁知道下列异常在什么情况下会发生: ArrayIndexOutOfBoundsException,ClassCastException, IllegalArgumentException, IllegalStateException, NullPointerException, NumberFormatException, AssertionError, ExceptionInInitializerError, StackOverflowError or NoClassDefFoundError.
知道上面哪些是由虚拟机抛出的,其他的在什么情况应该被程序抛出。

异常:
ArrayIndexOutOfBoundsException:用非法索引访问数组时抛出的异常。如果索引为负或大于等于数组大小,则该索引为非法索引。
ClassCastException:当试图将对象强制转换为不是实例的子类时,抛出该异常
IllegalArgumentException:抛出的异常表明向方法传递了一个不合法或不正确的参数
IllegalStateException:在非法或不适当的时间调用方法时产生的信号。换句话说,即 Java 环境或 Java 应用程序没有处于请求操作所要求的适当状态下。
NullPointerException:当应用程序试图在需要对象的地方使用 null 时,抛出该异常。这种情况包括:

调用 null 对象的实例方法。
访问或修改 null 对象的字段。
将 null 作为一个数组,获得其长度。
将 null 作为一个数组,访问或修改其时间片。
将 null 作为 Throwable 值抛出。
应用程序应该抛出该类的实例,指示其他对 null 对象的非法使用。
NumberFormatException,:当应用程序试图将字符串转换成一种数值类型,但该字符串不能转换为适当格式时,抛出该异常。
错误:
AssertionError:抛出该异常指示某个断言失败。
ExceptionInInitializerError:静态初始化程序中发生意外异常的信号。抛出 ExceptionInInitializerError 表明在计算静态初始值或静态变量的初始值期间发生异常。
StackOverflowError :当应用程序递归太深而发生堆栈溢出时,抛出该错误。 NoClassDefFoundError: 当 Java 虚拟机或 ClassLoader 实例试图在类的定义中加载(作为通常方法调用的一部分或者作为使用 new 表达式创建的新实例的一部分),但无法找到该类的定义时,抛出此异常。
当前执行的类被编译时,所搜索的类定义存在,但无法再找到该定义。

-------------------
JDK帮助都很详细,建议看一下
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-08-03
异常:
ArrayIndexOutOfBoundsException:用非法索引访问数组时抛出的异常。如果索引为负或大于等于数组大小,则该索引为非法索引。
ClassCastException:当试图将对象强制转换为不是实例的子类时,抛出该异常
IllegalArgumentException:抛出的异常表明向方法传递了一个不合法或不正确的参数
IllegalStateException:在非法或不适当的时间调用方法时产生的信号。换句话说,即 Java 环境或 Java 应用程序没有处于请求操作所要求的适当状态下。
NullPointerException:当应用程序试图在需要对象的地方使用 null 时,抛出该异常。这种情况包括:

调用 null 对象的实例方法。
访问或修改 null 对象的字段。
将 null 作为一个数组,获得其长度。
将 null 作为一个数组,访问或修改其时间片。
将 null 作为 Throwable 值抛出。
应用程序应该抛出该类的实例,指示其他对 null 对象的非法使用。
NumberFormatException,:当应用程序试图将字符串转换成一种数值类型,但该字符串不能转换为适当格式时,抛出该异常。
错误:
AssertionError:抛出该异常指示某个断言失败。
ExceptionInInitializerError:静态初始化程序中发生意外异常的信号。抛出 ExceptionInInitializerError 表明在计算静态初始值或静态变量的初始值期间发生异常。
StackOverflowError :当应用程序递归太深而发生堆栈溢出时,抛出该错误。 NoClassDefFoundError: 当 Java 虚拟机或 ClassLoader 实例试图在类的定义中加载(作为通常方法调用的一部分或者作为使用 new 表达式创建的新实例的一部分),但无法找到该类的定义时,抛出此异常。
当前执行的类被编译时,所搜索的类定义存在,但无法再找到该定义。
第2个回答  2009-08-03
看名字,顾名思义基本可得,为什么会有这样的问题呢,建议看下javadoc,都有详细的解释

ArrayIndexOutOfBoundsException 取串时,超出边界,如:System.out.println("test".charAt(5));

ClassCastException 强制类转换出错,如:
Object o = new Object();
System.out.println((Test)o);

参考资料:http://java.sun.com/j2se/1.4.2/docs/api/

第3个回答  2009-08-03
看一下他们的继承结构就知道哪些是虚拟机抛出的
相似回答