ERROR:无法预先通过代码进行处理
Exception:因为编程错误、外部因素引发的问题
Exception根据错误发生的时间分为:
- 编译期
- 运行期
异常处理:抓抛模型
抛:一旦出现异常,就会生成一个异常类的对象,抛出异常后,后续代码不再执行
抓:异常处理
在编译过程中不在报错,但是运行时还是会报出。
try{
可能出现异常的代码块
}catch(异常类型1,变量名){处理方式}
catch(异常类型2,变量名){处理方式}
catch(异常类型3,变量名){处理方式}
finally(
一定会执行的代码
)
根据try中发生的异常种类,对catch进行匹配,若成功处理则跳出try-catch结构,满足子父类关系,父类的catch往后面放。
catch中常用的方式:
- a.getMessage()
- printStackTrace()
try结构中声明的变量,在try无法使用,可以在外面声明,try内使用。
若存在return 则先执行finally中的语句后再return,例如数据库连接断开、I/O流等 一定要执行的情况:file.close()
逐层向上抛,最终还是通过try-catch方法处理
在method3调用method2后,异常抛给3,在3中try掉。
子类重写后抛出的异常不能大于父类被重写方法抛出的异常,父类没有抛异常,子类不能抛,只能通过try自己解决。
手动抛出异常(throw)package welcome_java;
public class testTest {
public static void main(String[] args) {
id i = new id(100);
i.idTest();
id i2 = new id(-1);
i2.idTest();
}
}
class id{
private int ids;
public id(int id) {
this.ids = ids;
}
public void idTest(){
if(ids>0){
System.out.println("true");
}else{
throw new RuntimeException("非法id");
}
}
}
通过手动抛出异常,规范id的输入。
自定义异常类:


