Java finally catch try关键字

发布于:2024-06-09 ⋅ 阅读:(157) ⋅ 点赞:(0)

Java finally catch try关键字

finally:

finally 关键字用来创建在 try 代码块后面执行的代码块;无论是否发生异常,finally 代码块中的代码总会被执行。
在 finally 代码块中,可以进行文件流关闭等收尾善后性质的语句

catch:

catch 关键字用于捕获异常并处理异常的代码块,通常与try关键字一起使用,可以使用多个 catch 代码块对异常进行多重捕获

try:

try 关键字用于包裹可能会抛出异常的代码块

使用示例

try{
   // 程序代码
}catch(异常类型1 异常的变量名1){
  // 程序代码
}catch(异常类型2 异常的变量名2){
  // 程序代码
}catch(异常类型3 异常的变量名3){
  // 程序代码
}finally{
  // 程序代码,如关闭文件流等善后操作
}

上述代码也可以改写成下面这种try-with-resources格式

try (resource declaration) {
  // 使用的资源
} catch (ExceptionType e) {
  // 异常块
}

try-with-resources:

try-with-resources是一种异常处理机制,它能够自动关闭在 try 块中声明的资源,无需显式地在 finally 块中关闭(JDK7 之后)

常见面试题:

finally 和 catch代码块中return的执行顺序问题

public static void main(String[] args) {

        System.out.println(a());
        System.out.println("-----------------");
        System.out.println(b());
        System.out.println("-----------------");
        System.out.println(c());
    }

    private static int a() {
        try{
            System.out.println(1/0);
        }catch(Exception e){
            System.out.println("catch is begin");
            return 1 ;
        }finally{
            System.out.println("finally is begin");
        }
        return 0;
    }

    private static int b() {
        try{
            //待捕获代码
            System.out.println(1/0);
        }catch(Exception e){
            System.out.println("catch is begin");
            return 1 ;
        }finally{
            System.out.println("finally is begin");
            return 2 ;
        }
    }

    private static int c() {
        try{
            //待捕获代码
            System.out.println(1/1);
        }catch(Exception e){
            System.out.println("catch is begin");
            return 1 ;
        }finally{
            System.out.println("finally is begin");
            return 2 ;
        }
    }

运行结果

catch is begin
finally is begin
1
-----------------
catch is begin
finally is begin
2
-----------------
1
finally is begin
2

依照这里的运行结果可以得出结论
1、无论是否有异常,finally中的代码都会执行
2、有异常的情况下,如果catch和finally代码块中均有return,则catch中的return不会被执行(或者覆盖);如果catch代码块中有return,finally代码块中没有return,则catch中的return会被执行


网站公告

今日签到

点亮在社区的每一天
去签到