一、异常简介
程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常。异常发生时,是任程序自生自灭,立刻退出终止。在Java中即,Java在编译或运行或者运行过程中出现的错误。
二、异常对象
异常对象与正常new一个对象一样,标准异常类都有两个构造器
一个是默认构造器,一个是接受字符串作为参数,以便把相关信息放入异常对象的构造器
throw new Exception()
throw new Exception("")
三、捕获异常
3.1 try块
用于监听。将要被监听的代码(可能抛出异常的代码)放在try语句块之内,当try语句块内发生异常时,异常就被抛出。
3.2异常处理程序
- catch 不能独立于 try 存在
- catch里面不能没有内容
- try 代码后不能既没 catch 块也没 finally 块
- 异常如果是同级关系,catch谁前谁后没有关系
如果异常之间存在上下级关系,上级需要放在后面
try{
//code that might generate exception
}catch(Type1 id1){
//handle exception of type1
}catch(Type2 id2){
//handle exception of type2
}
异常处理有两种模型
- 终止模型:一旦异常抛出,就不会回来继续执行
- 恢复模型:尝试修正错误以后,重新调用方法
一般都是采用终止模型
四、异常说明
将可能发生的异常写在方法声明后面
用关键词throws
,不是throw
//A,B,C都为异常
void f() throws A,B,c....{
}
如果方法后没有异常说明就不会抛出异常
除了从RuntimeException继承的异常,它们可以在没有异常说明的时候被抛出
五、异常类
5.1 简介
在 Java 中,所有的异常都有一个共同的祖先 Throwable(可抛出)
其下有2个子类
Error
:是程序无法处理的错误,表示编译时和系统错误,Exception
:是程序本身可以处理的异常,在java类库、用户方法以及运行时故障中发生的异常
Java的异常按照受不受检查分为
- 1. 非检查异常
RuntimeException 与其子类,以及错误(Error)
不需要自己thows会自动抛出,但编译器要求你必须处置的异常
- 2. 检查异常
非运行时异常
编译器不要求强制处置的异常
代码还没运行呢,编译器就会检查你的代码,会不会出现异常
图中后面具体的异常只罗列了部分
5.2 常用方法
1. 返回异常发生时的详细信息
public string getMessage();
2. 返回异常发生时的简要描述
public string toString();
3. 返回异常对象的本地化信息。使用Throwable的子类覆盖这个方法,可以声称本地化信息。
如果子类没有覆盖该方法,则该方法返回的信息与getMessage()返回的结果相同
public string getLocalizedMessage();
4. 在控制台上打印Throwable对象封装的异常信息
public void printStackTrace();
六、finally块
对于一些代码,可能会希望无论try块中的异常是否抛出,它们都能得到执行,finally语句块总会执行,即便在 try块中有return,break,continue等改变执行流的语句,finally也会执行。
七、关键词总结
关键词 | 说明 |
---|---|
try | 用于监听。将要被监听的代码(可能抛出异常的代码)放在try语句块之内,当try语句块内发生异常时,异常就被抛出 |
catch | 用于捕获异常。catch用来捕获try语句块中发生的异常 |
finally | finally语句块总是会被执行 |
throw | 用于抛出自定义异常 |
throws | 异常说明,在方法定义后声明可能会发生的异常 |
参考以下博客所写