java编程思想-8

Java编程思想

异常处理
异常就是阻止当前程序正常执行的方法或者作用域。异常问题:属于一类可能会出现的问题,具有一定的不确定性。

1、基本异常

异常的出现允许我们对异常进行处理,我们可以让程序停止或者处理完程序并且返回到稳定状态。而异常类中常用的参数就是对异常的说明。

2、捕获异常

使用try{ –1– }cahtch(Exception e){–2–}finally{–3–}来进行处理。
我们使用try{ }模块对可能出现异常的代码进行异常检查。Catch(Exception e){}是异常处理模块,参数是所有的Exception类及其子类,再在{—}中进行异常处理,处理完成后代码就可以回到稳定状态了。Finally{}模块是为了保证异常出现一定要执行的部分,比如数据库插入异常,需要数据库关闭,或者事物回滚等操作则需要在finally中执行。

3、创建自定义异常

继承Exception类,并且让编译器产生默认的构造器。输出的异常可以使用e.printStackTrace(System.out),就可以把异常输出到控制台。该方法来自Throwable,它会返回:从方法调用处到异常出现处的方法调用序列。
记录日志:可以使用java.util.logging工具。通过Logger.getLogger(“msg”)方式获得一个Logger的实例。

4、异常说明

在方法声明的时候添加异常说明,这样可以提醒使用者,并且让他们自己处理相应的异常。使用方式为:方法名 throws 异常序列。这里注意了尽量做到代码中跑出什么异常,在方法声明处做何种异常说明,不要只说明异常而实际上并不抛出异常。

5、捕获所有异常

Exception的基类是Throwable,并从中继承了相关方法:

  • String getMessage();
  • String getLocalizedMessage(); //创建此- Throwable的本地描述。
  • Void printStackTrace();//输出异常轨迹栈
  • Throwable fillInStackTrace(); //记录异常栈帧中的当前状态。当程序重新抛出异常时,使用该方法避免原来的异常被抛弃。

轨迹栈可以通过getStackTrace()方法来直接获取一个由栈轨迹构成的数组。每个元素为StackTraceElement类。

5.1、重新抛出异常

对于catch中一旦捕获到异常,其他的catch都不再执行了,所以范围最大的Exception应该放在最后一个catch参数中,防止其出现漏网之鱼。而一旦捕获异常有一种做法就是直接处理掉,另外一种做法就是直接throw出去。
Throw原来的异常:如果直接抛出原来异常,则会出现新的异常发生点到方法调用处的信息消失,为了避免信息丢失,使用throw e.fillInStackTrace();就可以把原来的信息加到新的异常栈中。
Throw新的异常:则原来的异常信息肯定会丢失。它只抛出新的异常信息。

5.2、异常链

异常链:捕获一个异常后抛出一个新的异常,并且希望把原始信息保存下来,这就是异常链。Throwable子类中都会接受一个cause对象作为参数,这个参数就是表示原始异常,可以通过这个参数把原始异常传递给新的异常。使用Exception的initCause()方法保存原来的信息。

6、finally使用

Finally中做最后的清理工作,catch中有return,那么执行完finally后会执行catch(该catch是被执行的那个)中的return。如果finally中也有return,那么他会覆盖catch中的return。

7、继承中的异常问题

被覆写的方法不能添加新的异常说明。构造器如果有异常声明,那么子类构造其中不能捕获它的异常:因为子类构造器的第一句必须执行super()语句,该语句不能放在try模块中。

8、总结

异常处理中常用的是自定义异常,可以在方法中抛出异常并且抛出异常,便于查找错误,也避免了代码中太多的try…catch…模块。使用中注意避免异常出现,某些类的对象没有创建却在finally中对其进行清理的动作出现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

欧阳小伙

您的打赏是我创作的:最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值