2023年11月29日发(作者:)
java异常处理机制的理解
参考《第⼀⾏代码java》《java程序设计教程》
java中程序的错误有语法错误、语义错误。如果是语法性错误,在编译时就可以检查出来并解决。语义错误是在程序运⾏时出现的,在编译
时没有错误,但在运⾏时可能会出现错误导致程序退出,这些错误称为异常。在没有异常处理的情况下,也即默认情况下,程序出现异常后
会打印异常信息,同时终⽌执⾏异常之后的代码。为了让程序在出现异常后仍然可以正常执⾏完毕,必须引⼊异常处理语句完善代码。因
此,异常处理机制⽤于检测和处理异常,提⾼java程序的健壮性。
在java中,所有的异常都当做对象处理,即当发⽣异常时产⽣了异常对象。java异常处理机制的语法为:
try{
//可能出现异常的语句
}catch(异常类型 对象){
常见异常
ArithmeticException:数学运算异常。
NullPointerException:空指针异常。
NegativeArraySizeException:数组⼤⼩为负值异常。
ArrayIndexOutOfBoundException:数组下标越界异常。
NumberFormatException:数字格式异常。
InputMismatchException:输⼊类型不匹配异常。
NoSuchMethodException:⽅法不存在异常。
DataFormatException:数据格式错误异常。
NoClassDefFoundError:未找到类定义错误。
public void printStackTrace() //将此Throwable对象的堆栈跟踪输出⾄错误输出流,作为的值
异常的处理流程
1、当程序出现异常,JVM⾃动根据异常的类型实例化⼀个与之类型匹配的异常类对象。
2、根据异常对象判断是否存在异常处理。如果不存在异常处理,则由JVM对异常默认处理:输出异常信息,结束程序调⽤。
3、如果存在异常捕获操作,try语句捕获异常类实例化对象,再与catch语句进⾏异常类型匹配,并处理异常。
4、不管是否匹配到catch语句,如果存在finally语句,就会执⾏finally语句代码。
5、finally语句后⾯的代码根据之前是否匹配到catch语句进⾏处理。如果匹配到catch语句,也即捕获到异常,则继续执⾏finally后的语
句。如果没有匹配到catch语句,则将异常交由JVM默认处理。
异常捕获是⼀个异常类对象的传递过程,所有异常类对象都可以相⽗类对象转型。因此可以异常类对象可以使⽤Exception接收,简单实现
异常处理。
对于异常分开处理还是⼀起处理的问题,没有严格的规范,⽽是根据项⽬开发标准决定。异常分开处理便于代码的维护,统⼀处理则可以节
省开发精⼒。
在处理多个异常时,范围⼩的异常要放在范围⼤的异常之前处理。否则,范围⼩的异常会因异常处理完成⽽⽆法处理。
class myMath{
public static int div(int x, int y) throws Exception{ //出现异常交给被调⽤处输出
n("===start===");
int result = 0;
try{
result = x / y;
}catch(Exception e){
throw e; //向上抛出
}finally{
n("===end===");
public class exception_assert{
public static void main(String args[]){
int num = 10;
assert num == 20 : "num isn't 20";
n("num = " + num);
}
}
⾃定义异常
当java提供的异常类型不能满⾜开发需要时,可以⾃⼰开发⼀个异常类。实现⾃定义异常类,只需要继承Exception或RuntimeException
⽗类即可。
class AddException extends Exception{
public AddException(String msg){
super(msg);
}
}
public class exception_selfdefine{
public static void main(String args[]){
int num = 20;
try{
if(num > 10){
throw new AddException("value is too large!");
}
}catch(Exception e){
tackTrace();
}
}
}
练习
A、 try块后⾄少应有⼀个catch块 B、 try块后必须有finally块
C、 可能抛出异常的⽅法应放在try块中 D、 对抛出的异常的处理应放在try块中
5、 finally块中的代码将 。
A、 总是被执⾏
B、 如果try块后⾯没有catch块时,finally块中的代码才会执⾏
C、 异常发⽣时才被执⾏
D、 异常没有发⽣时才执⾏
6、 ⼀个异常将终⽌ 。
A、 整个程序 B、 只终⽌抛出异常的⽅法
C、 产⽣异常的try块 D、 上⾯的说法都不对
7、 所有异常的共同⽗类是 。
A、 Error B、 Exception C、 Throwable D、 RuntimeException
判断
1、 ⼀个try语句后有多个catch时,捕获范围⼤的异常要放在捕获范围⼩的异常之后。 ( )
2、 finally语句可以根据需要有选择的添加。 ( )
简答
1、 简述RuntimeException和Exception的区别。
2、 try、catch、finally三种语句的功能是什么?
3、 简述Java中的异常处理机制。
4、 简述Error和Exception的区别。
5、 列举三个常见的RuntimeException⼦类。
编程
1、 编写应⽤程序,从命令⾏输⼊两个⼩数参数,求它们的商。要求程序中捕获NumberFormatException异常和ArithmeticException异
常。


发布评论