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