final关键字
java的final关键字用于变量,类或方法时,含义各不相同
变量: 应用于基本类型变量时,一旦初始化,变量值就不能修改;应用于引用变量时,该引用变量不能指向堆上的任何其他对象。
方法:该方法不能被子类重写
类: 该类不能派生子类
关键字finally
关键字finally和try/catch语句块配对使用,即使有异常跑出,也能确保某段代码一定会执行。
finally语句块在try和catch之后,在控制权交回之前执行
在Java中,若在try-catch-finally的try语句块中插入return语句,finally语句块是否还会执行?
会执行。
public class finallyClass {
public static String lem() {
System.out.println("lem");
return "return from lem";
}
public static String foo() {
int x = 0;
int y = 0;
try {
System.out.println("start try");
int b = y / x;
System.out.println("end try");
return "returned from try";
}catch (Exception ex) {
System.out.println("catch");
return lem() + "|returned from catch";
}finally {
System.out.println("finally");
}
}
public static void bar() {
System.out.println("start bar");
String v = foo();
System.out.println(v);
System.out.println("end bar");
}
public static void main(String[] args) {
bar();
}
}
打印输出:
start bar
start try
catch
lem
finally
return from lem|returned from catch
end bar
可以看到,整个catch语句块都会执行,包括return语句里的函数调用,然后执行finally语句块,之后函数才真正返回
当退出try语句块时,finally语句块将会执行。即使我们试图从try语句块里跳出(通过return,break,continue等任何异常),finally语句块仍然会执行。
但有些情况下finally语句块将不会执行,比如:
如果虚拟机在try/catch语句块执行期间退出
如果执行try/catch语句块的线程被杀死中止了。
finalize方法
在真正对象销毁之前,自动垃圾收集器会调用finalize()方法。
因此,一个类可以重写Object类的fianlize()方法,以便定义在垃圾收集时的特定性为。