final:修饰类、变量、方法
final的四个特点:
1)final修饰的类不能被继承
2)final修饰的变量不能被第二次赋值
3)final修饰的方法不可以被重写
4)final修饰的变量能够防止指令重排序(修饰的变量执行顺序不能被调换)
finally:在异常处理中和try-catch搭配使用,不管有没有执行异常,finally一定会执行:
public class TestTryCatchFinally {
public static void main(String[] args) {
int x = test();
System.out.println(x);
}
//情况一
static int test() {
int n =0;
try {
n=3;
Class<?> aClass = Class.forName("");
} catch (ClassNotFoundException e) {
n=5;
} finally {
n=20;
}
return n; //输出n=20
}
}
finalize:是Object类中的一个方法,当一个堆空间中的对象没有被栈空间变量指向的时候,这个对象会等待被java回收:垃圾回收器在回收某个对象的时候,首先会调用该对象的finalize()方法。
public class FinalizeEscapeGC {
public static FinalizeEscapeGC SAVE_HOOK = null;
public void isAlive() {
System.out.println("yes, i am still alive :)");
}
@Override
protected void finalize() throws Throwable {//回收对象的方法
super.finalize();//调用finalize()方法
System.out.println("finalize method executed!");
FinalizeEscapeGC.SAVE_HOOK = this;
}
public static void main(String[] args) throws Throwable {
SAVE_HOOK = new FinalizeEscapeGC();
//对象第一次成功拯救自己
SAVE_HOOK = null;
System.gc();//回收资源
// 因为Finalizer方法优先级很低,暂停0.5秒,以等待它
Thread.sleep(500);
if (SAVE_HOOK != null) {
SAVE_HOOK.isAlive();
} else {
System.out.println("no, i am dead :(");
}
}
}