1.异常的概念
exception
异常不是程序的错误,而是程序在运行时发生的意外,开发者在开发时没有预料到,或者在代码中故意抛出异常(发生一个消息,表示这个程序有问题),没有处理的异常会导致程序终止运行。
1.1异常是什么,有异常存在
【图片】
![](https://img.haomeiwen.com/i291935/4ad7da2c463a485b.png)
1.2异常是需要处理的
【异常不处理的图片】
![](https://img.haomeiwen.com/i291935/324d2a8d3e1f600b.png)
如何处理?
引入异常处理机制。
2.异常处理机制
使用try-catch
try:表示可能抛出异常的部分。使用try来表示某段程序可能存在异常
catch:捕获异常部分,捕获后可以来处理。
先try后catch
语法:
try{//可能发生异常的部分
}
catch(exception ex){//捕获异常后如何处理,捕获到的异常会使用ex来表示。
}
try和catch如何编写?
【图片】
![](https://img.haomeiwen.com/i291935/67b84b004df1b31e.png)
使用快捷alt+/
使用try,catch可以避免异常发生时,程序终止运行,从而保持程序继续向下执行。
【案例】
3.异常的分类
不同类别的异常,处理手段不一样,分类的目的是让异常更为具体。
Object-->Throwable
Throwable:Error和Exception
Error:AWTError、ThreadDeath等
Exception:RuntimeException和其他。
RuntimeException:ArithmeticException、NullPointerException、NumberFormatException等等。
【异常层次】
![](https://img.haomeiwen.com/i291935/7e2b0b717507b883.png)
通常异常分为checked和Runtime:
checked异常,在编译阶段发生。会导致编译不能进行下去。
Runtime异常,在运行阶段发生。会导致运行不能进行下去。
注意:
程序是先编译后执行。编译阶段在运行前。
4.try和catch变体形式
4.1多个catch
程序会按顺序匹配执行catch;但是只会匹配一个。
【案例】
![](https://img.haomeiwen.com/i291935/1efd0ebe9d646790.png)
![](https://img.haomeiwen.com/i291935/fafab9b0e3f22f29.png)
思考:
catch的顺序能不能变?
(1)多个catch同时使用,catch中捕获的异常越具体(也就是子类异常)越需要写在上面。遵循的原则就是你考虑的东西越具体,越要早匹配。所以按异常分类,子类在上书写,父类在下书写。
![](https://img.haomeiwen.com/i291935/e62df1e597b3daa4.png)
(2)同级的异常,可以互换位置。(同一个父类下的子类)
![](https://img.haomeiwen.com/i291935/db1c222514a58c0d.png)
4.2finally
无论如何都会往下执行。
意义:通常是放置一些释放资源的代码。哪些属于释放资源的代码?
释放磁盘空间,释放内存,释放已经占有的资源。
注意:finally中是必须要执行的代码,如果再次出现异常怎么办?继续try/catch
![](https://img.haomeiwen.com/i291935/67fa12786133d875.png)
5.throws
抛出
5.1为什么要throws?
希望异常交给合理的人来处理。
5.2throws的方式?
两种方式:
(1)原处throws异常
【案例】
![](https://img.haomeiwen.com/i291935/75d969a58bb334ed.png)
(2)在方法定义时throws异常。
【图片】出现异常的方法,需要使用try和catch包裹
![](https://img.haomeiwen.com/i291935/4ed279a0288b74c5.png)
【案例】
![](https://img.haomeiwen.com/i291935/10cbdddc394c74fc.png)
注意:方法定义时抛出的异常不能比方法内出现的异常级别小(级别是指类的层次)
作业:
模拟电商购买场景:
(1)第一步:提示用户登录,用户输入账号和密码。账号密码不对,抛出异常。
(2)第二步:登录后,输入购买商品,如果商品名不是指定名称,抛出异常。
(3)第三步:输入购买数量。如果不合法抛出异常。
要求:使用try/catch来处理程序异常,可以使用主动throw异常,也可以使用程序运行时自身发生的异常。并且处理他们。
网友评论