final, finally, finalize() 的区别

    以前对于final, finally, finalize() 不是很了解,查阅资料后,写下自己的笔记,权当消化。简而言之, 顾名思义,final 即最终的,也就说被 final修饰的所有东西都不能再改变。

    1. 关键字 final

        1.1 final 修饰变量:静态变量 & 非静态变量

        1.2 final 修饰方法

        1.3 final修饰义类

       

        1.1 final 修饰变量

               1.1.1  fiinal 修饰非静态变量

               在定义时直接初始化变量

               public final int NUM = 10;

               被 final 修饰的变量赋值后,其值不能够改变,该变量相当于常量,变量用大写字母表示。

 

              在初始化块中进行初始化

              public final int NUM;            

               // 初始化块

              {

                  NUM = 10;

              }

             

               在构造器中初始化

               public class Test(String [] args){

                   private final int NUM;

                   public Test(){

                             NUM = 10;

                   }

              }

 

 

            1.1.2 final 修饰静态变量

             在定义时直接初始化

             public static final int NUM = 10;

             和非静态变量一样,被final修饰的静态变量值不能改变,而且该变量属于类,被该类的所有实例共享。

             

             在静态代码块中初始化

             private static final int NUM;

              // 静态代码块

             static {

                      NUM = 10;

             }

             

             需要注意的是:

                    final 修饰的变量必须被初始化,否则无法通过编译;

                   当用代码块初始化 final 修饰的变量时, 静态变量只能在静态代码块中初始化,非静态变量只能在非静态代码块中初始化;

                   final 修饰的 静态变量不能在构造器中初始化。

                                         

        1.2 final 修饰方法

               final 修饰方法时,该方法不能被覆盖。也就是说,当一个父类中有 final 修饰的方法时,在其子类中该方法不能被覆盖。

 

        1.3 final 修饰类

             final 修饰类时,该类不能被继承,因此 final 不能用来修饰 抽象类和接口。

      

      2. finally

          finally 在 try / catch 语句中使用 如:

try{
    throw NullPoinertException();
}catch(NullPointerException e){
    System.out.println("出现空指针异常");
}finally{
  System.out.println("finally最后一定被执行");
}

       当出现异常时,需要释放一些资源和还原状态,所以适合把这些代码放到 finally 的代码块中,最后一定被执行。

 

     3. finalize()

        finalize() 方法在 Java 的垃圾回收期(GC)清理其从属对象时被调用。该方法用来释放资源或执行一些清理工作。

      

Public class FinallyTest{

    protected void finalize() throws Throwable{
         System.out.println("调用了finalize()方法");
    } 

    public static void main(String [] args){
        FinallyTest ft = new FinallyTest();
        ft.gc(); // 调用垃圾回收器
    }
}   // 运行结果显示:调用了finalize()方法


 



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值