- 什么是异常?
不正常的情况就是异常。
默认情况下,JVM会处理报错的异常,执行步骤如下。
-
暂停程序
-
报错,返回错误位置和原因。
注意:尽量不要让JVM处理异常。
-
处理异常的方法
java自身提供了完善的异常处理机制,可以帮助我们解决问题。
这里主要介绍三种:
try-catch;try-多重catch;try-多重catch-finally。
try-catch:
语法结构: try{ 有可能出现异常的代码块 }catch(声明异常){ 异常解决办法 }
执行顺序: 1,执行try块中的内容 2,如果try块中内容出现异常,执行catch块 3,匹配catch中声明的异常信息 ,如果匹配上,则执行catch中的代码 4,继续执行后续代码 5,如果catch中的异常信息没有匹配到 那么此时交由jvm处理该异常。
注意:catch中的类型一定要注意,能够捕获到try块中实际出现的异常信息, 如果忘记了具体的异常信息可以通过使用Exception去捕获异常信息。
try-多重catch:
语法结构:
try{ 有可能出现异常的代码块 }catch(声明异常1){ 异常解决办法 }catch(声明异常2){
异常解决办法
}。。。{
}
try-多重执行顺序:
- 执行try块中的内容
- 如果try块中的内容出现异常,new出异常
- 逐一匹配catch块中,异常信息,匹配上则执行该catch块,执行完毕,整个try-多重catch结束。
- 如果匹配不是则交由JVM处理。
注意:在多重catch中,一般在最后一个catch语句中会编写一个exception,用来捕获可能未被识别的信息。不要在第一个catch中编写父类异常,会导致隐藏掉所有的子类异常。
try-多重catch-finally:
语法结构:
try{ 有可能出现异常的代码块 }catch(声明异常1){ 异常解决办法 }catch(声明异常2){
异常解决办法
}。。。{
}finally{
//用于存放关闭资源的代码
}
执行顺序与try-多重catch相同,finally一定会执行。
注意:终结finally的唯一办法,编写System.exit();结束虚拟机,但一般不这么做。
-
异常对象的常用方法
toString;当前异常类型及原因描述。
printStackTrace:打印堆栈信息,原因描述,异常位置和异常类型。
getMessage:异常原因。
-
throw,throws
throw:声明当前代码块的异常信息,并将之抛出给调用者。对于调用者而言,会使用try-catch捕获异常,如果
不使用try-catch捕获异常,则会由JVM处理异常。throw会导致程序中断,后续代码不再执行。
throws:在方法外对外抛出某个异常,由调用者解决异常。main方法中抛出的异常会全部交给JVM解决。
throw抛出异常,是异常解决的一种方法,定义在方法的外部,在形式参数后可以抛出多个异常,通过“;”分隔。
throw:定义在方法的内部,声明可能出现的异常。
一般将throw和throws一起使用。
- 自定义异常
为什么要自定义异常?
JDK中提供的异常信息不满足使用。
如何自定义异常?
-
声明一个自定义异常类。
-
继承Exception
-
编写两个构造器,一个为空,一个带字符串。
- Throwable
所有异常的父类。
Throwable.png












网友评论