Final修饰符

  • 修饰类:不可继承
  • 修饰方法:不可重写,但可重载
  • 修饰变量:一旦被赋值则不能再更改(数组不能再赋值,但是里面的值是可变的)

为什么内部类和匿名内部类只能访问局部 final 变量?
当外部类的方法结束时,外部类的局部变量理应销毁了,但是内部类可能还存在(比如线程还在跑),此时内部类访问外部类的变量,就会出现矛盾,这个变量不存在,所以就要把外部类的变量复制一份到内部类,给它使用,但是,不能让这个变量在内部类中被修改后,影响到外部类,可能会出现问题,所以只能是 final

或者可以用另一种方法,利用原子类的 CAS 特性来设置变量值