异常的引入,概念,分类,处理目的
异常的引入:
在生活中:
小明放学回家
在学校(编译时期)
- 不要闯红灯
- 记得带伞
- 不要和陌生人说话
在路上(运行时期)
- 闯绿灯被撞了
- 碰瓷
- 被打劫
- 地震(Error)
到家里(执行结束)
异常的概念:
异常的本质就是Java当中对可能出现的问题惊醒描述的一种对象提醒下
异常的分类
异常:凡是Excetption的子类都是异常
编译时异常:在编译时期发生的异常,程序员可以处理,因为编译会报错
Exception的子类但不是RuntimeExcetion的子类
运行时异常: 在运行时期发生的异常,程序员也可以处理,一般都是代码的逻辑性不够严谨不够健壮,依赖的是程序员的经验
RuntimeExcetion的子类都是运行时异常
严重错误:在程序执行的整个阶段,都有可能发生,错误的无法解决的,可以避免 例如:StacjOverflow
异常处理的目的
处理异常的目的:并不是为了修复程序的错误,而是就算程序出现了错误,也能够让程序继续执行 ANR
jvm默认是如何处理异常的?
- 打印错误信息
a.异常名称java.lang.ArithmeticExceptionn
b.异常的消息 / by zero
c.异常索发生的方法位置 main
d.异常所在Java文件中ExceptionDemo02
e.异常发生行号 14 - 终止程序
System.exit(0);
JVM处理异常的方式不能够满足我们开发的需求,那么我们需要自己处理的异常
如何来处理异常?
方式一:try…catch…finally
方式二:throws
处理异常的格式:
try{
//放置程序可能出现问题的代码
}catch(异常类 异常名){
//这里放置异常处理的代码
} finally{
//释放资源
}
注意:
- try块的代码越少越好
- try块中一旦发生异常,那么try块中发生异常后面所有的代码都不会被执行
- 多个catch块只会执行一个
- Exception接受异常必须放在异常的最后面,满足子类后父类
异常的执行流程:
-
程序执行到错误行,系统会创建一个异常对象,并且会抛给我们
ArithmeticeException exp = new ArothmeticeException("/by zero");
throw exp; -
程序进入catch匹配异常
匹配成功,程序执行catch块代码
ArithmeticeException ae = exp;
匹配失败,交给jvm处理
处理异常的标准方式:
- 能够显示处理的尽量显示处理,提高程序的可读性
- 但是一定要在异常处理的最好加上 父类Exception处理