Java包包含Exception 子类,这些子类描述了每个包所特有的异常。Exception 的每个子类代表一个特定的异常类型。
RuntimeException 类--Exception 的subclass --及其子类描述了在运行时由 Java 虚拟机(JVM)自动抛出的异常对象。
运行时异常一般是由源代码中的错误引起的。例如,在除以一个除数之前,你需要确保该除数不等于零。
RuntimeException 子类包含各种子类。这些包括
ArithmeticExceptionIndexOutOfBoundsExceptionIllegalStateExceptionNegativeArraySizeException
ArithmeticException
当一个程序试图做一些破坏算术规则的事情时,会抛出一个ArithmeticException 。例如,如果一个方法试图用一个整数除以0,该方法会抛出一个该类的实例。
IndexOutOfBoundsException
当一个字符串或数组的索引超出范围时,会抛出一个IndexOutOfBoundsException 。例如,试图访问一个十元数组中的第十二个元素将抛出这个异常。
IllegalStateException
当一个方法被非法调用的时候,会抛出一个IllegalStateException 。换句话说,它当时的状态不正确,不能被调用。
NegativeArraySizeException
如果一个应用程序试图创建一个大小为负数的数组,就会抛出一个NegativeArraySizeException 。一个数组必须有零或更多的元素。
你可以通过使用try-catch 块来捕获RuntimeException 类型。
可能触发运行时异常的代码,如果不包含try-catch 块,仍然可以编译。所有源自RuntimeException 的异常都被称为未检查的异常。这意味着编译器不会检查它们是否被处理或声明。
所有继承自Exception ,并且不是RuntimeException 的子类的类都被称为检查过的异常类。
当检查过的异常可能出现在一个方法中时,它们必须在方法声明中使用throws 子句来声明,或者在方法主体中明确处理。否则,代码将无法编译。
一个可能导致检查性异常的例子是当一个方法试图打开一个无法打开的文件时。
你使用try-catch 语句来处理被引发的检查性异常。
检验过的异常类包括
ClassNotFoundExceptionInterruptedExceptionIllegalAccessExceptionFileNotFoundException
ClassNotFoundException
ClassNotFoundException 是在程序试图用一个类的名字加载该类时抛出的,但是没有找到指定名字的类的定义。当程序使用 类中的 方法或 或 类中的 方法时,就会发生这些异常。Class forName findSystemClass ClassLoader loadClass
InterruptedException
当一个线程长时间不活动,而另一个线程使用Thread 类中的interrupt 方法来中断它时,会抛出一个InterruptedException 。
IllegalAccessException
当当前执行的方法不能访问应用程序试图获取或设置的字段的定义时,会抛出一个IllegalAccessException 。这也适用于该方法不能访问应用程序试图调用的方法的定义的情况。
FileNotFoundException
FileNotFoundException当应用程序无法打开一个由路径名指定的文件时,就会抛出属于java.io 包的 。如果该文件无法访问,或者不存在,就会发生这种情况。