java中的final关键字的相关知识点

  今天看了ImportView翻译的一篇关于java中的final关键字的文章,特此作一下记录,与大家分享。本篇随笔简要总结final关键字的用法,好处以及相关总结。

  1.       finla关键字可以用于声明变量,此处的变量既可以为成员变量也可以为本地变量,本地变量就是在代码块中或者方法中的变量,称为final变量。final变量通常与static一起使用, 称为常量,例如:public static final String COUNTRY = "China" . 常量即为不可变的量。此处应注意:仅用final声明的成员变量只可以在两种情况下进行初始化,或者在声明的同时进行初始化,或者在构造器中进行初始化。但是与static一起进行声明的常量则必须在声明的时候进行初始化。本地变量可以在声明的时候初始化或在方法的其他部分初始化,但只能初始化一次。
  2.   final修饰方法,表示此方法是不能被子类重写的,但可以被同类中的同名方法重载。如果一个方法已经足够完整,子类不需要进行重写的话,则可以将此方法声明为final方法。final方法比非final方法要快,因为final方法在编译的时候已经静态绑定了,而非final方法则是运行时的动态绑定。
  3.      final 修饰类,称为final类,表示此类是不能被继承的,它的功能通常是完整的,java中有许多final类,如果去查JDK API,可以发现String, Integer, Character, Boolean以及其他包装类都是final类。
  4.      使用final关键字的好处:
      [1]final关键字提高了性能 ,JVM和Java应用都会缓存final变量。  [2]final变量可以安全的在多线程环境下进行共享,而不需要额外的同步开销。[3] 使用final关键字,JVM会对方法、变量及类进行优化。
  5.     final关键字相关知识点总结:

            [1].final关键字可用来修饰成员变量,本地变量,方法以及类。

            [2].final成员变量必须在声明的时候或者构造器中进行初始化,否则会发生编译错误,final本地变量由于不能在构造器中赋值,所以只能在声明的同时进行初始化。

            [3].final变量只能赋值一次,任何对已赋值final变量进行修改的尝试都会发生编译错误。

            [4].在匿名类中的所有变量是final变量。

            [5].final方法不能被子类重写,final类不能被继承。

            [6].接口中的所有成员变量默认都是public static final的,所有的方法都是public abstract的。

            [7].final和abstract两个关键字是相互排斥的,一个类如果是final的,则肯定不是abstract类,反之亦然。

            [8].final方法在编译时进行静态绑定。

            [9].没有在声明时初始化的final变量称为空白final变量(blank final variable),它们必须在构造器中初始化,或者调用this()初始化。不这么做的话,编译器会报错“final变量(变量名)需要进行初始化”。

            [10].将类、方法、变量声明为final能够提高性能,这样JVM就有机会进行估计,然后优化。

            [11].对于集合对象声明为final指的是引用不能被更改,但是你可以向其中增加,删除或者改变内容。例如:

            

final List<Integer> list = new ArrayList<Integer>() ;
List<Integer> list1 = new ArrayList<Integer>() ;
list1.add(1) ;
list1.add(2) ;
list1.add(3) ;
list = list1 ;//compile error,.the final local variable list cannot be assigned.

               由上,我们已经知道final变量、final 方法以及final类是什么了。必要的时候使用final,能写出更快、更好的代码的。

 

 

posted @ 2013-12-26 22:06  Thunderstorms  阅读(286)  评论(0编辑  收藏  举报