Java中异常处理的两种方式
Java中异常处理的两种方式
try-catch-finally
- 程序员在代码中国捕获发生的异常,自行处理
try{
可能发生异常的代码块}catch(Exception e){
系统将其封装成Exception对象 ,传递给catch。也可以在这里增加自己的业务逻辑
}finally{
不管是否有异常发生,finally代码块一定会执行
}
注意事项:
如果在try中发生异常了,则其后面的语句不会执行,直接进入catch中
1 | package Learn; |
try{}finaly{}也可以直接使用,但是程序会崩溃。并且finaly中语句会执行,但是其后面的程序并不会执行。
throws处理机制
我们假设jvm虚拟机调用main方法,而main方法调用了f1方法,f1调用f2方法。如果f2方法有异常,那么在f2中可以用try-catch方法自己处理,也可以throws抛出给f1方法,同理f1也可以做出相同的操作,而方法如果一直往上抛出,最终给到了jvm虚拟机会直接打印出来异常信息,进而中断程序。
在Java中,如果我们没有用操作区管理异常,则默认会一直向上抛出,直到jvm,在下面中我们可以看到f1中存在的异常抛出给了main方法,main方法捕捉并且进行处理。
1 | package Learn; |
细节问题
对于问题中的编译异常必须进行处理,而运行异常则有默认的处理机制
对于子类重写父类方法时,子类抛出的异常必须是父类异常的子类型或者相同
1 | class AA{ |