final 变量:是只读的;
final 方法:是不能继承或者重写的。
final 引用:引用不能修改,但是对象本身的属性可以修改;
final class:不可继承;
final MyObject o = new MyObject();
o.setValue("foo"); // Works just fine
o = new MyObject(); // Doesn't work.
虚拟机并不会知道你的变量是否是final的,所以final与内存泄露无关。
final不会让代码速度更快
1.final类
当一个类声明为final类,也就证明这个类是不能够被继承的,即禁止继承,因此final类的成员方法是没有机会被覆盖的,这个final类的功能是完整的。在Java中有很多类是final的,如String、Interger以及其他包装类。
final类的好处:不可变类有很多的好处,它们的对象是只读的,可以在多线程环境下安全的共享,不用额外的开销。
2.final方法
如果一个类不允许其子类覆盖某个方法,即不能被重写,则可以把这个方法声明为final方法。(类中所有的private方法都隐式的指定为final)。
使用final方法的原因:
方法锁定,防止任何继承类修改它的含义,确保在继承中使方法行为保持不变且不被覆盖;
效率,将一个方法指明为final,就是同意编译器将针对该方法的所有调用都转化为内嵌调用(相当于在编译的时候已经静态绑定,不需要在运行时再动态绑定)。
3.final变量
程序中有些数据的恒定不变是很有必要的,比如:
一个永不改变的编译时常量;
一个在运行时被初始化的值,而在程序的后面不希望它被改变。
这种类型的变量只能被赋值一次,一旦被赋值之后,就不能够再更改了。
有几点要注意的:
一个既是static又是final的域只占据一段不能改变的存储空间,一般用大写来表示;
final使数值恒定不变,而当用于对象时,final使引用恒定不变(一旦引用指向一个对象,就无法再把它改为指向另一个对象);
final变量的好处:
提高性能,JVM和Java应用程序都会缓存final变量;
final变量可以在安全的在多线程环境下进行共享,而不需要额外的开销。