csdn 11- java课堂总结

第8章 Java异常处理总结:
运行时错误(runtime error)
在程序运行时出现的一些非正常的现象被称为运行时错误,如除数为0、数组下标越界、文件不存在、内存不够用等等。 
分类:根据错误性质将运行时错误分为两类
1.致命性的错误
2.非致命性的异常
异常处理机制
Java提供了异常处理机制,通过面向对象的方法来处理异常。
在程序运行的过程中,如果发生了异常,则该程序(或Java虚拟机)生成一个代表该异常类的对象(包含该异常的详细信息),并把交给运行时系统;
运行时系统从生成对象的代码开始,沿方法的调用栈逐层回溯查找,直到找到包含相应处理代码的方法,并把异常对象交给该方法,来处理这一异常。
try语句块
将程序中可能出现异常的代码放入try块中,当try块中有语句引发异常时,系统将不再执行try块中未执行的语句,而执行匹配的catch块。如果try块中没有语句引发异常,则程序执行完try块中的语句后不执行catch块中的语句,即跳过catch语句,继续执行后面的程序。
catch块
每个try语句后面必须伴随一个或多个catch语句,用于捕捉try语句块所产生的异常并作相应的处理。
finally语句块
某些情况下,不管异常是否发生,都需要处理某些语句,那么就将这些语句放到finally语句块中。finally语句所包含的代码在任何情况下都会被执行。
一个try语句至少有一个catch语句或finally语句与之匹配,但匹配的catch可以有多个,而finally语句只能有一个,并且finally语句并非必须有的。
自定义异常类
虽然Java的内置异常处理能够处理大多数常见错误,但用户仍需建立自己的异常类型来处理特殊情况。这时可以通过创建Exception的子类来定义自己的异常类。
异常处理应注意的问题
在Java中,对异常进行处理需要考虑以下因素:
1.如果异常事件是在运行时产生的,并且在JDK API中没有与该异常事件相对应的异常对象,则应创建用户自定义类型的异常对象。
2.如果可以预测异常对象的类型并且该异常是在程序运行时发生的,则建议应用JDK API中定义的系统异常类型,并且可以抛出这种类型的异常对象由JVM处理。
3.如果不能确定异常对象的类型以及异常发生的时机,则应该采用系统类型异常对象并由JVM处理。
4.对应用程序设计失误导致的数组越界、非法变量等类型的异常,如果要全部捕获所有类型的异常对象,会增加系统开销,导致程序的运行效率降低,建议应用程序可以不对此类异常进行捕获,而交由JVM进行处理。
5.对于实现输入/输出处理、网络通讯和数据库访问功能的代码,必须进行异常对象的捕获和处理 。
断言
如果没有断言机制,Java程序通常使用if-else或switch语句进行变量状态检查。缺点:
1.由于检查的数据类型不完全相同,这样的语句形式不会统一。
2.因为检查仅仅是应用在测试阶段,而if-else或switch语句在发布以后仍然将起作用,如果消除这些代码就意味着要注释或者删除这些代码,如果这些代码量很大就意味着工作很繁重并存在风险。
使用断言的优点: 
1.Java程序员用统一的方式处理状态检查问题;
2.断言只需在发行的时候关闭该功能即可。
断言的开启和关闭
在默认情况下断言是关闭的,因此在使用断言以前,需要先开启断言功能,方法:java –ea MyClass或者java –enableassertions MyClass
关闭断言功能的方法:java –da MyClass或者java –disableassertions MyClass
注意:断言检查通常在开发和测试时开启。为了提高性能,在软件发布后,断言检查通常是关闭的。 
什么时候使用断言
1.通常来说,断言用于检查一些关键的值,并且这些值对整个程序,或者局部功能的完成有很大的影响。
2.断言表达式应该短小、易懂,如果需要评估复杂的表达式,应该使用函数计算。
使用断言的情况
检查控制流:在if-else和switch语句中,可以在不应该发生的控制支流上加上assert语句。如果这种情况发生了,assert能够检查出来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值