概念
- Java异常是Java提供处理程序中错误的一种机制。
- 错误是指在程序运行过程中发生地一些异常事件。
- Java程序运行过程中如出现异常事件,可以生成一个异常对象,该异常对象封装了异常事件的信息并将被提交给Java运行时系统,这个过程称为抛出(throw)异常。
- 当Java运行时系统接收到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交给其处理,这一过程称为捕获(catch)异常
|
|
异常分类
- Throwable//所有异常类的父类
- Error//称为处理不了的错误
- Exception//能处理的错误(除Runtime Exception外的异常,必须处理)
- 在Exception中还包括一类特殊的异常(Runtime Exception),它可以处理,也可以不处理。
Finally关键字
Finally段的代码无论是否发生异常都有执行
抛出和捕获异常
把异常交给JVM处理1234567891011public class ExceptionTest { public static void execute() throws Exception { System.out.println("execute..."); throw new Exception(); } public static void main(String[] args) throws Exception {//自己不想处理,叫给上一层处理, 现在上一层是jvm execute(); }}
自定义异常
- 自定义异常类可以继承Throwable类或者Exception类,而不要继承Error类。自定义异常类之间也可以有继承关系
- 需要为自定义异常类设计构造方法,以方便构造自定义异常对象。
若要在异常中添加附加信息,则可以为类添加一些变量和方法。本例演示的自定义异常没有按照业务类型来命名,而是创建一个通用异常类,以retCd来区别发生异常的业务类型与发生位置,当然对于具体的retCd值,事先必须有具体的规定或说明。
|
|
注意事项
当使用多个catch语句块来捕获异常时,需要将父类的catch语句块放到子类型的catch块之后,这样才能保证后续的catch可能被执行,否则子类型的catch将永远无法到达,Java编译器会报编译错误。
如果try语句块中存在return语句,那么首先会执行finally语句块中的代码,然后才返回。
如果try语句块中存在System.exit(0)语句,那么久不会执行finally语句块的代码了,因为System.exit(0)会终止当前运行的JVM。程序在JVM终止前结束执行。