参考连接: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; //这句话也错误,同上 } }