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。

相关推荐
权泽谦32 分钟前
PHP 版羊了个羊完整开发实战:逻辑解析 + 三消算法 + 全套接口(附源码)
开发语言·php
老华带你飞32 分钟前
社区养老保障|智慧养老|基于springboot+小程序社区养老保障系统设计与实现(源码+数据库+文档)
java·数据库·vue.js·spring boot·小程序·毕设·社区养老保障
码龄3年 审核中32 分钟前
Linux record 03
java·linux·运维
q***876034 分钟前
springboot下使用druid-spring-boot-starter
java·spring boot·后端
程序员西西35 分钟前
SpringBoot无感刷新Token实战指南
java·开发语言·前端·后端·计算机·程序员
东南门吹雪36 分钟前
Spring的Bean相关
java·spring·bean·aop
q***697736 分钟前
Y20030018基于Java+Springboot+mysql+jsp+layui的家政服务系统的设计与实现 源代码 文档
java·spring boot·mysql
摇滚侠38 分钟前
2025最新 SpringCloud 教程,Nacos-配置中心-数据隔离-动态切换环境,笔记18
java·笔记·spring cloud
Seven9743 分钟前
剑指offer-42、和为S的两个数字
java