简介
所有的异常类是从 java.lang.Exception 类继承的子类。 Exception类是Throwable类的子类,Throwable还有一个子类Error。
java内置异常类
Java 语言定义了一些异常类在 java.lang 标准包中。标准运行时异常类的子类是最常见的异常类。由于 java.lang 包是默认加载到所有的 Java 程序的,所以大部分从运行时异常类继承而来的异常都可以直接使用。
- ClassNotFoundException:应用程序试图加载类时,找不到相应的类,抛出该异常。
- CloneNotSupportedException:当调用 Object 类中的 clone 方法克隆对象,但该对象的类无法实现 Cloneable 接口时,抛出该异常。
- IllegalAccessException:拒绝访问一个类的时候,抛出该异常。
- InstantiationException 当试图使用 Class 类中的 newInstance 方法创建一个类的实例,而指定的类对象因为是一个接口或是一个抽象类而无法实例化时,抛出该异常。
- InterruptedException:一个线程被另一个线程中断,抛出该异常。
- NoSuchFieldException:请求的变量不存在
- NoSuchMethodException:请求的方法不存在
Java 根据各个类库也定义了一些其他的异常,这里不一一列出。
异常方法
下面的列表是 Throwable 类的主要方法:
- public String getMessage() :返回关于发生的异常的详细信息。这个消息在Throwable 类的构造函数中初始化了。
- public Throwable getCause() :返回一个Throwable 对象代表异常原因。
- public String toString() :使用getMessage()的结果返回类的串级名字。
- public void printStackTrace(): 打印toString()结果和栈层次到System.err,即错误输出流。
- public StackTraceElement [] getStackTrace(): 返回一个包含堆栈层次的数组。下标为0的元素代表栈顶,最后一个元素代表方法调用堆栈的栈底。
- public Throwable fillInStackTrace(): 用当前的调用栈层次填充Throwable 对象栈层次,添加到栈层次任何先前信息中。
捕获异常
try
{
// 程序代码
}catch(ExceptionName e1)
{
//Catch 块
}
多重捕获块
try{
// 程序代码
}catch(异常类型1 异常的变量名1){
// 程序代码
}catch(异常类型2 异常的变量名2){
// 程序代码
}catch(异常类型2 异常的变量名2){
// 程序代码
}
throws 关键字:
定义一个方法的时候可以使用throws关键字声明。使用throws关键字声明的方法表示此方法不处理异常,而交给方法调用处进行处理。
throws关键字格式:
public 返回值类型 方法名称(参数列表,,,)throws 异常类{};
假设定义一个除法,对于除法操作可能出现异常,可能不会。所以对于这种方法最好将它使用throws关键字声明,一旦出现异常,则应该交给调用处处理。
class Math{
public int div(int i,int j) throws Exception{ // 定义除法操作,如果有异常,则交给被调用处处理
int temp = i / j ; // 计算,但是此处有可能出现异常
return temp ;
}
};
public class ThrowsDemo01{
public static void main(String args[]){
Math m = new Math() ; // 实例化Math类对象
try{
System.out.println("除法操作:" + m.div(10,2)) ;
}catch(Exception e){
e.printStackTrace() ; // 打印异常
}
}
};
因为div使用了throws关键字声明,所以调用此方法的时候,方法必须进行异常处理。通过try…catch;
- 如果在主方法使用了throws关键字,则表示一切异常交给JVM进行处理。默认处理方式也是JVM完成。
throw关键字
throw关机字作用是抛出一个异常,抛出的时候是抛出的是一个异常类的实例化对象,在异常处理中,try语句要捕获的是一个异常对象,那么此异常对象也可以自己抛出。
package methoud;
public class ThisDemo06{
public static void main(String args[]){
try{
throw new Exception("自己抛着玩的。") ; // 抛出异常的实例化对象
}catch(Exception e){
System.out.println(e) ;
}
}
};