09.Java–try…catch和finally

09.Java–try…catch和finally

当程序发生异常时,会立即终止,无法继续向下执行。为了保证程序能够有效的执行,Java中提供了一种对异常进行处理的方式一异 常捕获。异常捕获通常使用try…catch语句,其具体语法格式如下:

try{
    //可能发生的异常的语句
}catch(Exception e){
    //对捕获的异常进行相应处理
}

上述代码中,try{}代码块中包含的是可能发生异常的语句,catch(){}代码块中编写针对捕获的异常进行处理的代码。当try{}代码块中的程序发生了异常,系统会将这个异常的信息封装成一个异常对象,并将这个对象传递给catch(){}代码块。catch(){}代码块需要一个参数指明它所能够接收的异常类型,这个参数的类型必须是Exception类或其子类。

示例

public class Example29 {
	// 下面的方法实现了两个整数相除
	public static int divide(int x, int y) {
		try {
			int result = x / y;
			return result;
		} catch (Exception e) {
			System.out.println("捕获的异常信息为:" + e.getMessage());
		}
		return -1;// 定义当程序发生异常直接返回-1
	}

	public static void main(String[] args) {
		int result = divide(4, 0);// 调用divide()方法
		if (result == -1) {// 对调用方法返回结果发生判断
			System.out.println("程序发生异常");
		} else {
			System.out.println(result);
		}
	}
}

结果

在这里插入图片描述

在定义的整数除法运算方法divide()中对可能发生异常的代码用try…catch语句进行了捕获处理。在try{}代码块中发生被0除异常,程序会转而执行catch(){}中的代码,通过调用Exception对象的getMessage()方法,即可返回异常信息“/ by zero"。catch(){}代码块对异常处理完毕后,程序仍会向下执行,而不会因为异常而终止运行。需要注意的是,在try{ }代码块中,发生异常语句后面的代码是不会被执行的,如例中第6行代码的return语句就没有执行。

在程序中,有时候会希望有些语句无论程序是否发生异常都要执行,这时就可以在try-catch语句后,加一个finally{}代码块。接下来对例29进行修改,演示finally{}代码块的用法,如例30所示。

public class Example30 {
	// 下面的方法实现了两个整数相除
	public static int divide(int x, int y) {
		try {
			int result = x / y;
			return result;
		} catch (Exception e) {
			System.out.println("捕获的异常信息为:" + e.getMessage());
		} finally {
			System.out.println("执行finally代码块,无论程序是否异常,都会执行");
		}
		return -1;// 定义当程序发生异常直接返回-1
	}

	public static void main(String[] args) {
		int result = divide(4, 0);// 调用divide()方法
		if (result == -1) {// 对调用方法返回结果发生判断
			System.out.println("程序发生异常");
		} else {
			System.out.println(result);
		}
	}
}

结果

在这里插入图片描述

例30中,divide()方法中增加了一个finally{}代码块,用于处理无论程序是否发生异常都要执行的语句,该代码块并不受return语句和程序异常的影响。正是由于这种特殊性,在程序设计时,经常会在try-catch后使用finally{}代码块来完成必须做的事情,例如释放系统资源、关闭线程池等。需要注意的是,finally中的代码在-种情况下是不会执行的,那就是在try-catch中执行System.exit(0)语句。System.exit(0)表示退出当前的Java虛拟机,Java虚拟机停止了,任何代码都不能再执行了。

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

#YF#_长沙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值