简单的异常相关

1.异常的概念:程序运行不正确

受查异常/编译时异常:发生编译的时候处理

非受查异常/运行时的异常:发生在运行的时候需要处理

异常的处理方式:

在实际生活中:

对于比较严重的问题(比如与钱相关),直接让程序崩溃,防止造成更严重的后果。

不太严重的问题(大多数场景),记录错误日志,程序员处理。

可能会恢复的问题(和网络相关的场景),可以进行重试。

2. ArithmeticException算数异常

3.数组越界异常

4.空指针异常 NullPointerException

 

 5.输入不匹配异常

Throwable:异常体系的顶层类,派生出两个重要的子类Error和Exception

1.Error:Java虚拟机无法解决的严重问题,典型代表:StackOverflowError和OutOfMemoryError,一旦发生回力无天。(只能自己解决)

2.Exception:异常产生后程序员可以通过代码进行处理,使程序继续运行。

异常的处理


一.异常的抛出

1.防御式编程(LBYL):每一步都确认是否运行成功

 

2.事后认错型(EAFP)先运行,出错再去处理。

二.try catch捕获异常

try后面跟可能出现异常的代码,catch后面捕获可能出现的异常。(catch后面没有捕捉正确的异常,异常会交给jvm处理,程序会立即终止。

注意:错误代码后,catch捕获前的代码也无法执行。

 将上面的算数异常处理,使程序不会出现错误就无法运行后面的内容

 

 catch后面没有捕捉正确的异常时

 

printStackTrace();//快速定位异常出现的位置

 一个程序会有多个逻辑,所以可能会捕获到多个异常,所以这个时候,就可以多次使用catch来捕获可能发生的所有异常。

注意:当程序有多个异常时,也不会同时抛出两个及两个以上的异常,因为程序遇到一个异常就会去捕获这个异常。

 把所有异常写在一起,可以中间用  |  隔开

try  catch的捕获

补充:如果异常之间有父子类关系,不要把父类放在最前面,否则后面的程序没有意义。(eg:Exception是所有异常的父类,用Exception捕获异常就没有意义,具体也无法提示出是哪个类型的异常)

注意:当出错的方法处没有进行异常处理时,谁调用此方法,谁去处理这个异常。

eg:

 

 

三.throw new xxxException

throw:声明异常

注意:

1.throw必须写在方法的内部

2.抛出的对象必须是Exception和Exception的子类

3.抛出的是编译时异常,必须处理,否则无法通过编译

4.异常一旦抛出,后续代码就不会运行

 或者直接在方法中抛出异常再捕捉异常

 捕获异常打印出1,继续运行打印出2。

四.finally

有些特定的代码,无论程序是否发生异常,都需要执行,比如程序中打开的资源:网络连接,数据库连接等等。在程序正常或异常退出时,必须对资源进行回收。用finally去写我们需要关闭的资源。

 eg:Scanner的使用输入后必须有close();

可以发现try处有警告,这个时候鼠标放在try上,按住alt+enter,则idea会自己换种写法

 

观察idea所写的程序:try后面加括号,里面写上从键盘中输入,后面就不用写close()

 finally的使用意义eg:

 上述程序,若是正常输入了,最后的代码无法执行,程序没有关闭,所以为了关闭程序,可以在finally内的代码中加上close()。因为finally是一定会执行的。

注意:建议不要在finally中return数据,否则会改变程序前面已经执行过了的返回的值。

 

 



自定义异常类:有些情况会根据自己的业务场景,抛出符合自己业务场景的异常,这时需要我们自定义异常

 只是通过简单的打印无法解决问题

自定义异常,可以仿照本来就有的异常类型写

 仿照写出两个异常类,用户名异常和密码异常

 主程序用throw声明自定义异常类

再次改写: 用try catch抛出异常

总结:

1.自定义异常通常继承Exception或者RuntimeException 

2.继承Exception的异常是受查异常(受查异常编译时就不能通过,将代码中多处改成继承)

3.继承RuntimeException 的异常是非受查异常

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Roylelele

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值