final使用

参考连接:http://a123159521.iteye.com/blog/689441

Java中的final关键字通常的指的是“这是无法改变的”。它可能被做为三种的修饰词.------数据,方法,类。 
一 final数据 
1.在修饰基本类型时,表示它是一个常量,在定义时必须给予赋值. 
   特别的一个既是static又是final 的字段只占据一段不能改变的存储空间。 
2.在修饰对象或者数组时,它表示对对象或数组的引用恒定不变,然而对象本身却是可以修改的. 
  空白final:声明为final但末给定初值的字段,但必须确保空白final在使用前被初始化,一般在构造方法完成。 
  final参数:在方法的参数列表以声明的方式将参数指明为final,这意味着在方法里无法修改参数的引用所指向的对象。 
二 final方法 
1. 把方法锁定,使得在子类(导出类)中不能修改它的含义。 
2.效率,一个final方法被调用时会转为内嵌调用,不会使用常规的压栈方式,使得运行效率较高,尤其是在方法体较简单的情况下, 
   但也并不绝对。(与C++中的inline关键字类似) 
特别的:类中的所有private方法都隐式地指定为是final,所以在继承关系中不存在覆盖问题。 
三 final类 
声明为final的类不能派生出了子类,也就是不能被继承,一个final类中的所有方法都隐式地指定为final. 

我当时主要不懂的地方是final修饰对象的时候,fianl修饰对象的时候,指向的对象成员是可以发生变化的,但是final修饰的对象指向的内存无法改变,如下面例子:

package test;
public class CodeTest{
    int value;
    public CodeTest(int value){
        this.value=value;
    }
    public void charge(int dis){
        this.value+=dis;
    }
    public void test(){
        System.out.println(value);
    }
    
    public static void main(String[] args) {    
         CodeTest ori1=new CodeTest(1);
         CodeTest ori2=new CodeTest(2);
         final CodeTest Fori1=new CodeTest(3);
         Fori1.charge(10);      //这句话很正确,变量改变不影响Fori1指向的空间
         Fori1=new CodeTest(10);  //这句话错误,应该Fori1已经指向了一个空间,地址无法改变
         Fori1=ori1;               //这句话也错误,同上
    }    
}
View Code

 

原文地址:https://www.cnblogs.com/Joy06/p/3672652.html