首页 > 其他分享 >try...catch中finally子句的使用

try...catch中finally子句的使用

时间:2023-02-16 21:55:04浏览次数:44  
标签:... return int try finally 子句 100 执行

目录:

  • finally的使用
  • finally面试题
  • final、finally、finalize的区别

finally子句的使用:

1、在finally子句中的代码是最后且一定会执行的,即使try语句块中的代码出现异常

2、finally子句必须和try一起出现,不能单独编写

3、finally子句出现的情况如下:

通常finally语句块中完成资源的释放/关闭。

try{
     System.out.println("hi");
     return;
}finally{
     System.out.println("finally");
}
//注意,try和finally联合使用,没有catch也可以,但try不能单独使用
以上代码执行顺序:
先执行try,后执行finally,最后执行return

  注意:return语句只要执行,所在方法必然结束!

try{
    System.out.println("hi");
    //退出JVM
    System.exit(0);
}finally{
    System.out.println("finally");
}
//控制台输出:hi
原因:finally只有在退出JVM之后,其代码才不会执行

  finally面试题:

判断下面程序输出的结果为多少?

public static void main(String[] args){
    int result = m();
    System.out.println(result);
}
public static int m(){
    int i = 100;
    try{
        return i;
    }finally{
        i++;
    }
}

  答案:100

原因:

存在一些Java语法规则,方法体中的代码必须遵循自上而下的顺序依次执行;return语句一旦执行,整个方法必须结束。

在以上程序中执行完int i=100之后,代码执行就到了return i;此时为return 100;此语句搁置,先执行finally,最后执行return 100;

具体执行过程可以看代码反编译之后的结果

//上述代码反编译之后的结果
public static int m(){
    int i=100;
    int j=i;
    i++;//finally语句确实在return i;之前执行
    return j;//return 100
    Exception exception;
    exception;
    i++;
    throw exception;
}

  

final、finally、finalize的区别:

final是一个关键字,表示不变的,最终的

final int i=100;

其中final修饰的类无法继承、修饰的方法无法覆盖、修饰的变量不能重新赋值。

finally也是一个关键字,和try联合使用,用在异常机制中,并且finally语句块中的代码一定会执行

finalize()是object类中的一个方法,作为方法名出现,属于标识符,这个方法是由垃圾回收器G负责调用的。

标签:...,return,int,try,finally,子句,100,执行
From: https://www.cnblogs.com/TiAmo-bai/p/17128457.html

相关文章