Java异常
异常处理机制主要回答了三个问题:What、Where、Why
What:异常类型回答了什么被抛出
Where:异常堆栈跟踪回答了在哪抛出
Why:异常信息回答了为什么被抛出
从概念角度解析java的异常处理机制
Error:程序无法处理的程序错误,编译器不做检查(比如内存溢出,这些问题)
Exeption:程序可以处理的异常,捕获后可能恢复
总结是前者无法处理的错误,后者是可以处理的异常
Java的异常体系
所有异常的父类就是Thrwoable
两个子类 Error和Exception异常(下又有很多异常、运行异常、非运行异常),
从责任角度看:
1.Error属于JVM需要负担的责任
2.RuntimeException是程序应该负担的责任;
3.Checkd Exception可检查异常是Java编译器应该负担的责任
RuntimeException不可预知的,程序应当自行避免(NullPointerExceptio,IndexOutOfBoundsEception)
非RuntimeException可预知的,从编译器检验的异常(IOException,SqlException..)
常见Error以及Exception
RuntimeException
1.NullPointerException-空指针引用异常
2.ClassCastException-类型强制转换异常
3.IllegalArgumentException-传递非法参数异常
4.IndexOutOfBoundsException-下标越界异常
5.NumberFormatException-数字格式异常
非RuntimeException
1.ClassNotFoundException-找不到指定class的异常
2.IOException-IO操作异常
Error
1.NoClassDefFoundError-找不到class定义的异常
2.*eError-深递归导致被耗尽而抛出的异常
3.OutOfMemoryError-内存溢出异常
只有第一个异常会显示出来
其他的异常 只会在第一个异常处理完毕之后继续显示出来然后继续出来
下面分为 递归报错、运行时异常
package com.binglian.thorwable;
import java.io.FileNotFoundException;
public class ErrorAndException {
//深度递归异常、内存异常这种
private void throwError(){
throw new *Error();
}
//运行时异常
private void throwRuntimeException(){
throw new RuntimeException();
}
//检查时异常
private void throwCheckedException() throws FileNotFoundException{
throw new FileNotFoundException();
}
public static void main(String[] args)throws FileNotFoundException{
ErrorAndException andException=new ErrorAndException();
//报错只会显示第一异常
andException.throwError();
andException.throwRuntimeException();
andException.throwCheckedException();
}
}
Java的异常处理机制
抛出异常:创建异常对象,交由运行时系统处理
捕获异常:寻找合适的异常处理器异常,否则终止运行
有异常就抛出异常,然后捕获异常
try抛出
catch捕获异常
看最后结果,, finally不管有没有异常都会运行
高效主流的异常处理框架
在用户看来,应用系统发生的所有异常都是应用系统内部的异常
设计一个通用的继承自RuntimeException的异常来统一处理
其余异常都统一转译为上诉异常AppException
在Catch之后,抛出上述异常的子类,并提供足以定位的信息
由前端接受AppException做统一处理
try-catch的性能