当前位置: 代码迷 >> 综合 >> final finally finalize 的区别
  详细解决方案

final finally finalize 的区别

热度:28   发布时间:2024-01-29 04:45:41.0

1.final finally finalize的区别
1 final 修饰的类不能被继承
修饰方法不嫩被重写
修饰变量 只能赋值一次
2 finally 是try 语句中的一个语句体 不能单独使用 用来释放资源
3 finalize 是Object 类的 一个方法 当垃圾回收器确定该对象不存在更多引用时 由对象垃圾回收器调用此方法
2:如果catch里面有return语句,请问finally里面的代码还会执行吗?

  • 如果会,请问是在return前,还是return后。

  •   面试回答: 会。前。
    
  •  准确的说,应该是在中间。
    

    public static void main(String[] args) {
    // TODO Auto-generated method stub
    System.out.println(getInt());// 返回3
    }

    public static int getInt() {
    int a = 10;
    try {
    System.out.println(a / 0);// 分母除0抛出异常
    a = 20;// 不会执行
    } catch (ArithmeticException e) {
    a = 30;
    // System.exit(0);
    return a; // 形成返回路径return 30,而不是return a
    /*
    * return a在程序执行到这一步的时候,这里不是return a而是return 30;这个返回路径就形成了。
    * 但是呢,它发现后面还有finally,所以继续执行finally的内容,a=40 再次回到以前的返回路径,继续走return
    * 30;
    */
    } finally {
    a = 40;
    System.out.println(“a=” + a);// 会输出40,单此时的a已经不会和上面发生关系了
    // return a;// 如果这样结果就是40了。
    }
    //其实在下面的两句代码在执行的时候不会执行,如果不写会报错,因为不一定会执行catch,就没有了return 语句
    System.out.println(“a=” + a);
    return a;// 返回的是30

}

}
如果catch 里面还有return 语句 请问finally 里面代码还会执行吗?
finally 会执行
在前执行
a=40
30

  相关解决方案