一、异常介绍
Java异常是一个描述在代码段中发生的异常(也就是出错)情况的对象。
java提供了大量的异常类,这些类都继承自java.lang.Throwable类。下面是Throwable类的继承体系。
- Error类为错误类,表示java运行时产生的系统内部错误或资源耗尽的错误,是比较严重的,仅靠程序本身是不能解决的。
- Exception类为异常类,表示程序本身可以处理的错误,在开发java程序中进行的异常处理,都是针对Excption类及其子类。
在Exception类的子类中,自由RuntimeException类是表示运行时的异常,其他子类表示编译时的异常。
- 编译时异常:java编译器会对其进行检查,如果出现异常就必须对异常进行处理,否则无法通过便宜。
- 运行时异常:java编译器不会对其进行检查,出现异常时都能编译通过。例如:数组越界;
二、try..catch和finally
try..catch语句用于捕获异常,try会捕获在其内代码出现的异常,并在catch中处理。
try{
//可能出现异常的代码块;
}catch(ExceptionName e1){
//处理块;
}
- catch代码块处理完后,程序会继续向下执行,即执行在try..catch外面下面的代码。
- try代码块中出现异常后,代码块中没执行的代码不会继续执行,直接在catch中处理。
- catch中声明了接受异常的类型,必须是Exception类或其子类。
多重捕获块,
try{
//程序代码
}catch(异常类型1异常的变量名1){
//程序代码
}catch(异常类型2异常的变量名2){
//程序代码
}catch(异常类型2异常的变量名2){
//程序代码
}
- 如果保护代码中发生异常,异常被抛给第一个 catch 块。
- 如果抛出异常的数据类型与 ExceptionType1 匹配,它在这里就会被捕获。
- 如果不匹配,它会被传递给第二个 catch 块。
- 如此,直到异常被捕获或者通过所有的 catch 块。
finally:加在try..catch后面,无论程序是否发生异常都会执行finally中的代码。
try{
//程序代码
}catch(异常类型1异常的变量名1){
//程序代码
}finally{
//程序代码
}
- 只有在执行了System.exit(0)语句后,finally中的代码块才不会执行,因为该代码表示退出当前的java虚拟机,虚拟机停止后任何代码都不能执行了。
- 在 finally 代码块中,可以运行清理类型等收尾善后性质的语句。
三、throws关键字
throws用于在某一方法中抛出异常。
publicclassclassName {
publicstaticvoid main(Stringargs[]){
try{
double i;
withdraw(i);
}catch(ArrayIndexOutOfBoundsExceptione){
System.out.println("Exception thrown :"+e);
}
}
publicvoidwithdraw(doubleamount)throwsException {
}
}
- 在使用throws抛出方法中的异常时,必须需要在调用的时候对抛出的异常进行捕获,否则会发生编译错误。
- throws后面声明发生异常的类型,为方法声明抛出一个异常。
四、自定义异常
自定义异常便是创建一个异常类,但必须继承Exception类或其子类。
publicclassInsufficientFundsException extends Exception {
publicInsufficientFundsException(){
super();
}
publicInsufficientFundsException(String message){
super(message);//调用Exception有参的构造方法;
}
}
publicclassclassName {
publicstaticvoid main(Stringargs[]){
try{ //捕获异常;
double i;
withdraw(i);
}catch(InsufficientFundsException e){
System.out.println(e.getMessage);
}
}
publicvoidwithdraw(doubleamount)throwsInsufficientFundsException {
int i=2;
if(i>0){
thrownewInsufficientFundsException("i大于0");//抛出异常;
}
}
}
五、异常方法
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 对象栈层次,添加到栈层次任何先前信息中。 |