10.14号关于异常的上课实践报告
异常发生于程序执行期间,表明出现了一个非法的运行状况。许多JDK中的方法在检测到非法情况时,都会抛出一个异常对象。
异常处理的目的是依据实际情况提供不同的错误应对策略与手段,使程序更稳定,更安全。
异常处理的主要用途是提供准确的错误消息,解释失败的原因、位置和错误类型等,同时提供一定的恢复能力,尽可能地保证数据完整性不被破坏,并让程序能继续运
首先运行P10的Java文件
了解到Exception是所有异常类的超类,int为0时不能作为除数,否则会出现上方的异常。
try代码块执行可能会出错的代码,当捕捉到异常时,会自动跳转到catch代码块,执行异常的处理,最后finally的语句一定会被执行。
Throwable类有两个直接子类Exception和Error
可捕获的异常分为Check异常和Runtime异常,用throw语句可以抛出这种异常对象。
assert [boolean 表达式],其次使用assert断言语句时,
如果[boolean表达式]为true,则程序继续执行。如果为false,则程序抛出AssertionError,并终止执行。
div
为无符号除法,idiv
为有符号除法idiv
进行的是128 / 64
位除法,即被除数为128位、除数为64位。一个浮点数除以0不会报错,返回为Infinity,翻译过来就是无穷大。
try代码块后面可以接多个catch语句,每个catch捕获一个异常,不能有两个相同的异常类型。
将catch(Exception e)放在别的catch块前面会使这些catch块都不执行,因此Java不会编译这个程序。
P26代码执行
p27代码执行
p28代码执行
对于try语句内部嵌套try语句,执行完内部的try catch语句,不会向外层的try-catch语句抛出异常,继续按照顺序执行。
p29代码执行
finally语句不一定会执行,若在catch语句强制退出exit(0)则不会执行finally语句。
二、进一步深入学习
1.throws语句的作用
throws语句表面某个方法的内部代码存在异常,但自己不能处理异常,需要由调用者来处理,或者在方法体中用try-catch语句来捕捉异常。
异常主要分为受控异常和不受控异常,顾名思义,受控异常在执行之前就会告诉报错了,而不受控异常,比如数组越界编译期间不会告诉。
当一个方法声明抛出多个异常,在此方法调用语句处,只要catch其中任何一个异常,代码就可以正常编译。
在Java7之后的版本,在catch语句内部可以捕获多个异常,比如IOExpection | OutofMemoryExipetion.
三、自定义异常与异常处理链
P43代码执行
Java异常处理的目的是提高程序的健壮性,你可以在catch和finally代码块中给程序一个修正机会,使得程序不因异常而终止或者流程发生以外的改变。同时,通过获取Java异常信息,也为程序的开发维护提供了方便,一般通过异常信息就很快就能找到出现异常的问题(代码)所在。
Java异常处理是Java语言的一大特色,也是个难点,掌握异常处理可以让写的代码更健壮和易于维护。
通用异常
- JVM(Java虚拟机) 异常:由 JVM 抛出的异常或错误。例如:NullPointerException 类,ArrayIndexOutOfBoundsException 类,ClassCastException 类。
- 程序级异常:由程序或者API程序抛出的异常。例如 IllegalArgumentException 类,IllegalStateException 类。