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异

常。