Java有许多关键字,static和final这两个是咱们必须掌握的,它们有不少种用法,并且在恰当的环境下使用它们,能够提高程序运行性能,优化程序结构,如今咱们先来了解下final关键字。java
final关键字能够用来修饰类,方法,变量(局部变量和成员变量) ,用final关键字修饰的变量,只能进行一次赋值操做,而且在生存期内,不能够改变它的值。编程
/** * @author Lee * @// TODO 2018/7/19-11:08 * @description */ public class MapTest { public static void main(String[] args) { final int v1 = 1; final int v2; v2 = 2; final FinalTest test = new FinalTest(1); test.v = 4; System.out.println("v1:" + v1 + ",v2:" + v2 + ",v:" + test.v); } } class FinalTest { int v; public FinalTest(int v){ this.v = v; } }
在给v1赋初始值以后,v1的值不会再被修改。从v2能够看到,final修饰的变量能够不在声明时赋值,便可以先声明,后赋值。v是一个引用变量,当final修饰引用变量时,只是它的引用不可改变,可是引用对象的值是能够改变的。安全
“使用final方法的缘由有两个。第一个缘由是把方法锁定,以防任何继承类修改它的含义;第二个缘由是效率。在早期的Java实现版本中,会将final方法转为内嵌调用。可是若是方法过于庞大,可能看不到内嵌调用带来的任何性能提高。在最近的Java版本中,不须要使用final方法进行这些优化了。” ————《Java编程思想》性能
类的private 方法会被隐式的指定为final方法。优化
若是变量是做为参数传入的,咱们怎么保证它的值不会改变呢?这就用到了final的第二种用法,即在咱们编写方法时,能够在参数前面添加final关键字,它表示在整个方法中,咱们不会(其实是不能)改变参数的值this
final void output(final int f){ System.out.println(f); }
final修饰的类是没法被继承的,若是一个类你永远不会让它继承,就能够用final进行修饰。final类中的成员变量能够根据须要设为final,可是要注意final类中的全部成员方法都会被隐式地指定为final方法。在使用final修饰类的时候,要注意谨慎选择,除非这个类真的在之后不会用来继承或者出于安全的考虑,尽可能不要将类设计为final类设计
- 1.final用来修饰数据,包括成员变量和局部变量,该变量只能被赋值一次且它的值没法被改变。对于成员变量来说,咱们必须在声明时或者构造方法中对它赋值;
- 2.用来修饰方法参数,表示在变量的生存期中它的值不能被改变;
- 3.修饰方法,表示该方法没法被重写;
- 4.修饰类,表示该类没法被继承。
上面的四种方法中,第三种和第四种方法须要谨慎使用,由于在大多数状况下,若是是仅仅为了一点设计上的考虑,咱们并不须要使用final来修饰方法和类。code