8.2异常的抛出与捕捉

为了保证程序有效地执行,需要对抛出的异常进行相应的处理。在Java中,如果某个方法抛出异常,既可以在当前方法中进行捕捉,而后处理该异常,也可以将异常向上抛出,交由方法调用者来处理。本节将讲解Java中捕获异常的方法。

8.2.1抛出异常

异常抛出后,如果不做任何处理,程序就会被终止。例如,将一个字符串转换为整型,可以通过Integer类的parseInt()方法来实现。但如果该字符串不是数字形式,parselnt()方法就会抛出异常,程序将在出现异常的位置终止,不再执行下面的语句。

【例1】控制台输出"lili年龄是:20L"

在项目中创建Thundering类,在主方法中实现将不是数字形式的字符串转换为int型。运行程序,系统会报出异常提示。实例代码如下:

public class Thundering{ //创建类

public static void main(String[] args){ //主方法

String str = "lili"; //定义字符串

System.out.println(str+"年龄是:"); //输出的提示信息

int age = Integer.parselnt("20L"); //数据类型的转换

System.out.println(age); //输出信息

}

}
运行结果如下:

lili年龄是:

Exception in thread"main"java.lang.NumberFormatException:For input string:"20L"

从中可以看出,本实例报出的是NumberFormatException(字符串转换为数字)异常。提示信息"lili年龄是"已经输出,可知该句代码之前并没有异常,而变量age没有输出,可知程序在执行类型转换代码时已经终止。

8.2.2捕捉异常

Java语言的异常捕获结构由try、catch和finally 3部分组成。其中,try语句块存放的是可能发生异常的Java语句;catch语句块在try语句块之后,用来激发被捕获的异常;finally语句块是异常处理结构的最后执行部分,无论try语句块中的代码如何退出,都将执行finally语句块。语法如下:

try{

//程序代码块

}

catch(Exceptiontype1 e){

//对Exceptiontype1的处理

}

catch(Exceptiontype2 e){

//对Exceptiontype2的处理

}

...

finally{

//程序代码块

}

通过异常处理器的语法可知,异常处理器大致分为try-catch语句块和finally语句块。

1.try-catch语句块

下面将例1中的代码进行修改。

【例2】捕获例1中主方法抛出的异常

在项目中创建Take类,在主方法中使用try-catch语句块将可能出现的异常语句进行异常处理。实例代码如下:

public class Take{ //创建类

public static void main(String[] args){

try{ //try语句块中包含可能出现异常的程序代码

String str = "lili"; //定义字符串变量

System.out.println(str+"年龄是:"); //输出的信息

int age = Integer.parselnt("20L"); //数据类型转换 System.out.println(age);

}catch (Exception e){ //catch语句块用来获取异常信息

e.printStackTrace(); //输出异常性质

}

System.out.println("program over"); //输出信息

}

}
运行结果如下:

lili年龄是:

java.lang.NumberFormatException:For input string:"20L"

从中可以看出,程序仍然输出最后的提示信息,没有因为异常而终止。在例2中,将可能出现异常的代码用try-catch语句块进行处理,当try语句块中的语句发生异常时,程序就会跳转到catch语句块中执行,执行完catch语句块中的程序代码后,将继续执行catch语句块后的其他代码,而不会执行try语句块中发生异常语句后面的代码。由此可知,Java的异常处理是结构化的,不会因为一个异常影响整个程序的执行。

误区警示:

有时为了编程简单会忽略catch语句后的代码,这样try-catch语句就成了一种摆设,一旦程序在运行过程中出现了异常,就会导致最终运行结果与期望的不一致,而错误发生的原因很难查找。因此要养成良好的编程习惯,最好在catch语句块中写入处理异常的代码。

2.finally语句块

完整的异常处理语句一定要包含finally语句,无论程序中有无异常发生,并且无论之前的try-catch语句块是否顺利执行完毕,都会执行finally语句。但是,在以下4种特殊情况下,finally块不会被执行:

☑ 在finally语句块中发生了异常。

☑ 在前面的代码中使用了System.exit()退出程序。

☑ 程序所在的线程死亡。

☑ 关闭CPU。

相关推荐
子午1 分钟前
【2026原创】动物识别系统~Python+深度学习+人工智能+模型训练+图像识别
人工智能·python·深度学习
邵伯3 分钟前
Java源码中的排序算法(一)--Arrays.sort()
java·排序算法
o_insist7 分钟前
LangChain1.0 实现 PDF 文档向量检索全流程
人工智能·python·langchain
阿里巴巴P8高级架构师9 分钟前
从0到1:用 Spring Boot 4 + Java 21 打造一个智能AI面试官平台
java·后端
stevenzqzq11 分钟前
trace和Get thread dump的区别
java·android studio·断点
脑洞AI食验员12 分钟前
智能体来了:用异常与文件处理守住代码底线
人工智能·python
桦说编程12 分钟前
并发编程踩坑实录:这些原则,帮你少走80%的弯路
java·后端·性能优化
程序猿零零漆12 分钟前
Spring之旅 - 记录学习 Spring 框架的过程和经验(十三)SpringMVC快速入门、请求处理
java·学习·spring
BHXDML12 分钟前
JVM 深度理解 —— 程序的底层运行逻辑
java·开发语言·jvm
tkevinjd14 分钟前
net1(Java中的网络编程、TCP的三次握手与四次挥手)
java