JAVA中对try,catch,finally的理解

当程序不想给上层抛出异常,或者说想捕获异常时,通常我们会使用到try, catch , finally。 但是这其中是有一些地方不是特别明白,特记录于此。

try未发生异常时执行顺序

第1个情况:finally中无return

public class TryTest {

    public static void main(String[] args) {

        String result = testFunc();
        System.out.println(result);
    }

    private static String testFunc() {
        try {
            System.out.println("try executing");
            int result = 1 / 1;
            return "try end";
        } catch (Exception e) {
            System.out.println("catch executing");
            return "catch end";
        } finally {
            System.out.println("finally executing");
        }
    }
}

打印结果

try executing
finally executing
try end

第2个情况:finally中有return

public class TryTest {

    public static void main(String[] args) {

        String result = testFunc();
        System.out.println(result);
    }

    private static String testFunc() {
        try {
            System.out.println("try executing");
            int result = 1 / 1;
            return "try end";
        } catch (Exception e) {
            System.out.println("catch executing");
            return "catch end";
        } finally {
            System.out.println("finally executing");
            return "finally end";
        }
    }
}

打印结果

try executing
finally executing
finally end

所以总结上述两个情况:
1. 当try无异常时,先执行try不经过catch然后再执行finally
2. 若finally有return,则执行finally的return,程序结束 - (不推荐finally中使用return)
3. 若finally无return,则执行try中的return,程序结束。

try中发生异常时执行顺序

public class TryTest {

    public static void main(String[] args) {

        String result = testFunc();
        System.out.println(result);
    }
    private static String testFunc() {
        try {
            System.out.println("try executing");
            int result = 1 / 0;
            return "try end";
        } catch (Exception e) {
            System.out.println("catch executing");
            return "catch end";
        } finally {
            System.out.println("finally executing");
        }
    }
}

打印结果

try executing
catch executing
finally executing
catch end

总结:
1. 先执行try,若有异常则进入catch,catch return前会先执行finally
2. 若finally有return, 执行finally的return,程序结束 - 程序未贴出,参考try那一节
3. 若finally无return,执行catch中的return,程序结束

三者的关系

  1. 编写顺序必定是try -> catch… -> finally
  2. 三者允许无catch或者无finally
  3. catch允许有多个
  4. 若catch分支未捕捉到实际抛出的异常,则往上层抛出
  5. 若存在finally语句分支,则finally必定会被执行
Java try-catch-finally 语句用于捕获和处理异常。它的基本语法如下: ```java try { // 可能会抛出异常的代码块 } catch (ExceptionType1 e1) { // 处理异常类型1的代码块 } catch (ExceptionType2 e2) { // 处理异常类型2的代码块 } finally { // 无论是否发生异常,都会执行的代码块 } ``` 在 try,你可以放置可能会抛出异常的代码。如果在执行 try的代码时发生了异常,那么就会跳到相应的 catch进行异常处理。catch 块可以有多个,每个 catch 块用于捕获不同类型的异常,并提供相应的处理逻辑。catch的参数 e1、e2 是异常对象,你可以使用它们来获取有关异常的信息。 无论是否发生异常finally的代码都会被执行。finally 块通常用于释放资源或执行清理操作,确保在任何情况下都会执行。 如果在 try发生了异常,并且没有相应的 catch 块来处理该异常,那么该异常将被传递给上层调用栈,直到找到合适的 catch 块进行处理,或者如果没有找到任何 catch 块,则程序将终止。 以下是一个简单的示例: ```java try { int result = divide(10, 0); System.out.println("结果:" + result); } catch (ArithmeticException e) { System.out.println("除数不能为零!"); } finally { System.out.println("finally的代码"); } public static int divide(int dividend, int divisor) { return dividend / divisor; } ``` 在上面的示例,divide 方法会抛出一个 ArithmeticException 异常,因为除数为零。在 catch,我们对该异常进行处理,并输出相应的信息。无论是否发生异常finally的代码都会执行,输出 "finally的代码"。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值