(1) 异常:就是程序出现的不正常情况。
(2)异常体系:
Throwable
|--Error 严重的问题,是处理不了的。要改正代码的。
|--Exception
非RuntimeException 的,是需要处理的。编译期异常。
|--RuntimeException 不需要处理的,是需要改代码的。运行期异常。
举例:
Error:
地震,海啸。
Exception:
感冒了,头疼。
注意:
每种体系的子类都是以父亲的名称作为后缀。
XxxError
XxxException
(3)java 虚拟机的默认处理方式
把异常的类名,原因,位置等信息显示在控制台。
一旦有异常发生,其后的代码不能继续执行。
(4) 异常的解决方案:
A: 自己处理
基本格式:
try{
可能发生异常的代码 ;
}catch( 异常类名 变量名){
异常的处理代码 ;
}finally{
释放资源的代码 ;
}
注意:一旦有一次发生,就会立马执行 catch里面的代码。
变形格式:
try...catch
try...catch...catch
try...catch...catch...finally
try...finally
4. 多个异常的处理方式
A: 针对每一个异常都进行 try...catch
B: 针对所有异常 写一个try 多个 catch。
注意:
一定要捕捉到所有的异常。
一旦捕捉到异常了, try下面的语句将不再执行,程序将跳转到 catch。
5. 多个catch的顺序问题
如果异常同级,没有顺序。
如果异常存在父子关系,父类一定要放在子类的后面。
原则:如果你明确知道是什么异常,就一定要捕捉具体的异常,不建议使用父类。
JDK7 针对多个 catch进行了优化:
catch( 异常1 | 异常 2 | 异常3 ... 变量){}
注意:这些异常必须是平级关系。
和try...catch...catch的不同点是
JDK7 的这种方案是必须平级关系,不能有子父关系。
而try...catch...catch父亲放最后是可以的。
B: 抛出处理
用throws关键字在方法上声明 (抛出) 。
C: 到底使用谁 ?
a: 能自己处理的尽量自己处理。 (建议用try...catch)
b: 实在不行,你先抛了在说。上就业班我们对异常是进行统一处理的。
看到问题,点击鼠标。
7.Throwable 的三个方法
getMessage() -- 获取异常的消息字符串
toString() -- 全路径异常的类名:消息字符串
printStackTrace() -- 把异常的详细信息打印到控制台
8 、加入finally 语句
try {
// 可能产生异常的代码(尽可能的定位到异常出现的位置)
} catch ( 异常类名 变量名) { // Exception
// 异常处理语句
// 以后,返回错误页面等等。暂时显示异常。
} finally {
// 释放资源
}
finally 有和没有的区别:
假设,如果有必需要执行的程序,放在 finally中就一定会执行。
但是如果不放在 finally中,假设这个时候出现的异常是没有被捕获到的,那么程序就会死掉, 从而导致必须要执行的代码没有被执行到!
9. 总结异常处理两种方式:
抛出异常 -- 在方法上声明异常 : throws 异常类名
try...catch 处理
如果知道怎么处理,一般建议处理。不知道了,抛。
10. 自定义异常
自定义一个类,继承 Exception 或者 RuntimeException 。提供带参( String)构造。
工作中一般都继承自 RuntimeException
在可能出现这个异常的代码处,做异常处理时,抛出此异常。 -- 关键字 throw
|
|