final、finally与finalize三者的区别

转自:final、finally与finalize三者的区别

摘要:final为常量关键字,而finally为异常关键字,finalize为object自带方法名。看到这个题目,感觉像是高中题目一样。出题者用心良苦啊,将这三个联系起来,考察java基本功。在实际中finalize这个用得最少,而其他两个都很熟悉了。但若想流畅的表达三者区别,还需自己好好理一理。
一、final这个关键字在Java中代表不可改变的,可用来修饰类,方法,变量。
对class来说,用法如:final class A{}代表类A为终极类,不能被继承,也就没有子类之说与接口实现者之说。因此一个类不能既被声明为 abstract,又被声明为final。
对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一方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的,它是在 Object 类中定义的,因此所有的类都继承了它,子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。

        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

          • 0
            点赞
          • 2
            收藏
            觉得还不错? 一键收藏
          • 0
            评论

          “相关推荐”对你有帮助么?

          • 非常没帮助
          • 没帮助
          • 一般
          • 有帮助
          • 非常有帮助
          提交
          评论
          添加红包

          请填写红包祝福语或标题

          红包个数最小为10个

          红包金额最低5元

          当前余额3.43前往充值 >
          需支付:10.00
          成就一亿技术人!
          领取后你会自动成为博主和红包主的粉丝 规则
          hope_wisdom
          发出的红包
          实付
          使用余额支付
          点击重新获取
          扫码支付
          钱包余额 0

          抵扣说明:

          1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
          2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

          余额充值