可能很多人对于final的应用都停留在八股文的根底了解:被final润饰的类不能够被继承,
被final润饰的办法不能够被重写,被final润饰的变量不能够被扭转.
然而前面的却不是很了解:如果润饰援用,那么示意援用不可变,援用指向的内容可变.被final润饰的办法,JVM会尝试将其内联,以进步运行效率,被final润饰的常量,在编译阶段会存入常量池中。

首先咱们来了解final润饰援用变量

这里咱们来看一个例子:

int[] a = {1,2,3};a[0]  = 10;//是容许的a = {2,3};//是不容许的

能够看进去,咱们对援用自身的内容是能够批改的,然而因为要对批改成为另外一个对象,那么就不能胜利。

应用状况:其初始化能够在两个中央:

(1)其定义处,也就是说在final变量定义时间接给其赋值;

(2)构造方法中;

当一个办法被final润饰后。示意该办法不能被子类重写。final办法有一个长处是比非final办法要快,因为在编译时曾经动态绑定了,不须要在执行时在动静绑定。

应用状况:
那么也示意这样的办法提供的性能曾经满足以后要求,不须要再进行扩大了,并且也不容许任何从这个类继承的类来重写这种办法,然而继承仍旧可能继承这个办法,也就是示意可能间接应用。