Java中的final关键字

final在Java中是一个保留的关键字,可以声明成员变量、方法、类以及本地变量。申明为final的常量不能再次赋值,一旦你将引用声明作final,你将不能改变这个引用了,编译器会检查代码,如果你试图将变量再次初始化的话,编译器会报编译错误。下面来一一介绍:

 1. final变量

final变量是只读的,再次赋值会报错,final变量就是常量,而且通常常量名要大写。

它必须在构造器中初始化,或者调用this()初始化,否则编译器会报错“final变量(变量名)需要进行初始化”。

1 public static final String PATH= "C:\\file";
2 PATH= new String("C:\\file") //JVM会报错,invalid compilation error

有一种情况需要注意,当变量申明是符合数据类型时,变量将自动默认为final变量,如下代码会报错。

public class Test{
    public Byte b = 10;
    public void test(Byte b){
        b = 19; //JVM会报错,invalid compilation error
        }
}

2. final方法

代表这个方法不可以被子类的方法重写。如果一个方法的功能已经足够完整了,以后不用更改,可以声明此方法为final。final方法比非final方法要快,因为在编译的时候已经静态绑定了,不需要在运行时再动态绑定

 

 1 class Test1{
 2     public final String getValue(){
 3         return "abc";
 4     }
 5 }
 6  
 7 class Test2 extends Test1{
 8     @Override
 9     public final String getValue(){
10         return "def"; //compilation error: overridden method is final
11     }
12 }

3. final类

final类通常功能是完整的,它们不能被继承。Java中有许多类是final的,譬如String, Interger以及其他包装类。

 1   final class Test1{
 2       public final String getValue(){
 3           return "abc";
 4       }
 5   }
 6    
 7   class Test2 extends Test1{//compilation error: cannot inherit from final class
 8       @Override
 9       public final String getValue(){
10          return "def"; //compilation error: overridden method is final
11      }
12  }


4. 一种特殊的final对象,对于集合对象声明为final指的是引用不能被更改,但是你可以向其中增加,删除或者改变内容

1 private final List test= new ArrayList();
2 test.add(“a”);  //valid
3 test.add("b"); //valid
4 test= new Vector();  //not valid

 

posted @ 2017-03-18 18:09  测试人生-  阅读(398)  评论(0编辑  收藏  举报