首页 理论教育 Javafinally代码块的返回值和对象值的处理方法

Javafinally代码块的返回值和对象值的处理方法

时间:2023-10-19 理论教育 版权反馈
【摘要】:动手写15.6.1上面示例中,在finally代码块处理返回值会直接屏蔽try代码块中抛出的异常,其运行结果为:图15.6.1finally代码块返回值动手写15.6.2try {return person;} catch {} finally {person.name = "王学生"; }person.name = "刘老师"; return person; }}其运行结果为:图15.6.2finally代码修改对象值在finally中处理return返回值,看上去符合逻辑,但是程序执行时会产生逻辑错误。

Javafinally代码块的返回值和对象值的处理方法

使用异常的若干建议

Java异常会强制用户去考虑程序的安全性和健壮性,但是如果错误地使用异常和抛出异常,对于程序的正常流程和运行会带来毁灭性打击。因此,编写良好的程序代码,正确处理可能出现的异常尤为重要。为方便初学者更好地学习Java编程,下面为初学者使用异常和处理异常提出若干建议。

1.不要在finally块中处理返回值

在finally代码块中使用return关键字时一定要慎重,finally代码块中的return返回值逻辑会直接覆盖try代码块中正常的return返回值。

动手写15.6.1

上面示例中,在finally代码块处理返回值会直接屏蔽try代码块中抛出的异常,其运行结果为:

图15.6.1 finally代码块返回值

动手写15.6.2

try {

return person;

} catch (Exception e) {

} finally {

person.name = "王学生"; }

person.name = "刘老师"; return person; }}

其运行结果为:

(www.xing528.com)

图15.6.2 finally代码修改对象值

在finally中处理return返回值,看上去符合逻辑,但是程序执行时会产生逻辑错误。finally一般用来做异常的收尾处理,正常情况下很少使用,一旦加上了return返回值语句,就会让程序变得复杂,而且会产生一些隐蔽性较高的错误。

与return语句相似,System.exit(0)或RunTime.getRunTime().exit(0)出现在异常代码块中也会产生非常多的错误假象,增加代码的复杂性,大家有兴趣可以自行研究一下。

2.建议封装异常

Java中的异常机制可以确保程序的健壮性,提供系统可读性,但是由于Java API中提供的异常都是非常基础的异常,并且只有资深开发人员才能看懂,对于初次接触大型程序或终端的用户来说,这些异常并不友好,与实际业务逻辑脱离。所以,建议初学者尽可能根据业务场景来封装自定义异常。

动手写15.6.3

其运行结果为:

图15.6.3 开发封装自定义异常

3.针对不同的异常进行捕获

因为Exception类是所有运行异常的父类,所以开发者在捕获异常时可以使用Exception类来捕获所有可能出现的异常。

动手写15.6.4

上面示例中使用Exception类来捕获所有异常,运行结果为:

图15.6.4 使用Exception类捕获所有异常

虽然Exception类能捕获所有异常,但是不建议编写这种风格的代码,因为在实际业务场景中对所有异常都采用相同的处理方式并不现实。例如出现了IOException需要做一些特殊处理,而出现了SQLException需要做另一些特殊处理。并且,这种捕获方式很可能会忽略一些关键异常,导致本应该早些发现的业务逻辑错误并没有及时被发现。在实际开发中,建议开发者使用多个catch代码块对不同场景下的异常做不同的处理。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈