final finally与finalize三者的区别
final finally与finalize三者的区别
thinkerfans 发表于4年前
final finally与finalize三者的区别
  • 发表于 4年前
  • 阅读 411
  • 收藏 3
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

摘要: final为常量关键字,而finally为异常关键字,finalize为object自带方法名。

    看到这个题目,感觉像是高中题目一样。出题者用心良苦啊,将这个三个联系起来,考察java基本功。在实际中finalize这个用得最少,而其他两个都很熟悉了。但若想流畅的表达三者区别,还行自己好好理一理。

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

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

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

    对argument来说,先看看这个测试类:

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 //


共有 人打赏支持
粉丝 8
博文 52
码字总数 28512
×
thinkerfans
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: