您的位置:首页 > 其它

final、finally与finalize三者的区别

2017-04-03 13:12 363 查看
摘要: final为常量关键字,而finally为异常关键字,finalize为object自带方法名。看到这个题目,感觉像是高中题目一样。出题者用心良苦啊,将这个三个联系起来,考察java基本功。在实际中finalize这个用得最少,而其他两个都很熟悉了。但若想流畅的表达三者区别,还行自己好好理一理。

一、final这个关键字在Java中代表不可改变的,可用来修饰类,方法,变量。

对class来说,用法如:final class A{}代表类A为终极类,不能被继承,也就没有子类之说与接口实现者之说。

对method来说,用法如:public final void test(){} 代表此方法不能被重写。

对variable来说,必须在声明时赋值,且不能再改变。

先看看这个测试类:

public class Test {
int i =1;
final Test t  = new Test(); // Test对象引用变量t不能再指向其他Test对象。但可以通过t来改变此对象中的非常量属性值。
public final void test(){
final int i = 1;//final修饰的变量必须在声明时赋值,且不能在改变。
t.i++;
}
}


二、finally关键字用在异常处理中,用于处理异常后的清理工作,实际中一般用于关闭文件流,释放资源等操作。

System.out.println("----game start----");
try
{
System.out.println("----try----");
return ;
}catch(NullPointerException e){
System.out.println("----catch----");
}finally{
System.out.println("----finally----");
}
System.out.println("----game over----");


打印结果:

----game start----
----try----
----finally----


三、finalize方法,为Object基类自带方法,在实际中还没用上,在垃圾回收之前由这个方法进行清理工作,重写Object的这个方法自定义整理工作。

public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
for(int i=0;i<6;i++){
System.gc();
Test t = new Test();
}
System.gc();// 若注释此语句,则只打印0-4,这就是Java垃圾回收机制的一个简单验证。
}
static int count;
protected void finalize() throws Throwable {
// TODO Auto-generated method stub
super.finalize();
System.out.println("-----------finalize----------"+count++);
}
}


打印如下:

———–finalize———-0

———–finalize———-1

———–finalize———-2

———–finalize———-3

———–finalize———-4

———–finalize———-5
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: