Java异常处理中对于finally的一些思考

一、前言

因为这次面试有问到一些同学finally的问题,发现自己这块好像有点记不太清楚了,有的点可能还给人家说错了,一度弄得场面有些尴尬。所以说这篇文章深入研究一下finally的执行情况和返回值的情况。

二、finally一定会执行吗?

先给答案:肯定不是。

我们可以看两种情况:

1.在执行try块之前直接return,我们发现finally块是不会执行的
public class TryCatchTest {
   

	private static int total() {
   
		int i = 11;
		if (i == 11) {
   
			return i;
		}
		try {
   
			System.out.println("执行try");
		} finally {
   
			System.out.println("执行finally");
		}
		return 0;
	}

	public static void main(String[] args) {
   
		System.out.println("执行main:" + total());
	}
}
输出结果:
执行main:11
2.在执行try块之前制造一个错误,直接爆红
public class TryCatchTest {
   

	private static int total() {
   
		return 1 / 0;
		try {
   
			System.out.println("执行try");  //这行爆红,原因就是无法访问
		} finally {
   
			System.out.println("执行finally");
		}
		return 0;
	}

	public static void main(String[] args) {
   
		System.out.println
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: Java finally 语句可以在 try 块执行完后一定会被执行。在 finally 语句输出所有元素可以在 try 块使用循环遍历所有元素,在 finally再次进行输出。代码如下: ``` List<Integer> list = Arrays.asList(1, 2, 3, 4, 5); try { for (Integer i : list) { System.out.println(i); } } catch (Exception e) { e.printStackTrace(); } finally { for (Integer i : list) { System.out.println(i); } } ``` ### 回答2: 在Javafinally语句被用于定义一段代码,这段代码无论try和catch语句块是否发生异常,都会被执行。finally语句一般被用于清理和释放资源,如关闭文件和销毁对象等。 对于输出所有元素这个需求,我们可以考虑如下示例代码: ```java public class Main { public static void main(String[] args) { int[] numbers = {1, 2, 3, 4, 5}; try { // 尝试输出数组元素 for (int i = 0; i < numbers.length; i++) { System.out.println(numbers[i]); } } catch (Exception e) { e.printStackTrace(); } finally { // 输出数组所有元素 System.out.print("数组的元素为:"); for (int i = 0; i < numbers.length; i++) { System.out.print(numbers[i] + " "); } } } } ``` 在上面的代码,我们使用了try-catch-finally语句块,其try语句块尝试输出数组的元素,catch语句块用于捕获异常并打印异常信息,而finally语句块则用于输出数组的所有元素。 当程序运行时,先尝试输出数组的元素,如果没有出现异常,则不执行catch语句块,直接执行finally语句块输出所有元素;如果出现异常,则先执行catch语句块打印出异常信息,然后再执行finally语句块输出所有元素。 总之,finally语句块可以保证无论try语句块是否出现异常,它里面的代码都会被执行,这一点对于保证代码具有健壮性和稳定性非常重要。 ### 回答3: 在Java编程,使用finally语句可以确保无论是否发生异常,都能执行特定的语句块。这对于资源清理或保证代码安全性非常重要。 在处理异常时,finally语句通常用于释放资源或者执行一些善后操作。在以下示例,我们可以通过finally语句输出一个数组的所有元素。 ``` public class FinallyExample { public static void main(String[] args) { int[] arr = { 1, 2, 3, 4, 5 }; try { for (int i = 0; i < arr.length + 1; i++) { System.out.println(arr[i]); } } catch (ArrayIndexOutOfBoundsException e) { System.out.println("数组越界异常:" + e); } finally { System.out.println("数组所有元素:"); for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + " "); } } } } ``` 在以上代码,我们首先定义了一个数组,并在try块通过循环输出数组的所有元素。在数组越界时,我们使用catch块捕获异常,并输出异常信息。 接下来,我们使用finally语句输出数组的所有元素。即使在try块出现了异常finally语句也能被执行。在这个例子,我们可以看到在数组越界异常发生后,finally语句仍然能够把数组的所有元素正常输出。 这告诉我们finally语句的重要性:无论代码是否正常执行,finally语句始终能够得到执行,让我们更加高效、安全地编写程序。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值