final修饰的是一个基本类型,表示这个变量被赋予的值是不可变的,即它是个常量;如果 final 修饰的是一个对象,就表示这个变量被赋予的引用是不可变的,这里需要提醒大家注意的是,不可改变的只是这个变量所保存的引用,并不是这个引用所指 向的对象。 final 的含义与第一种情况相同。如果一个变量或方法参数被 final 修饰,就表示它只能被赋值一次,但是 JAVA 虚拟机为变量设定的默认值不记作一次赋值。 被 final 修饰的变量必须被初始化。初始化的方式有以下几种: 在定义的时候初始化。 final 变量可以在初始化块中初始化,不可以在静态初始化块中初始化。 静态 final 变量可以在静态初始化块中初始化,不可以在初始化块中初始化。 final 变量还可以在类的构造器中初始化,但是静态 final 变量不可以。 编译器在处理 private 方法时,是按照 final 方法来对待的,这样可以提高该方法被调用时的效率。不过子类仍然可以定义同父类中的 private 方法具有同样结构的方法,但是这并不会产生重写的效果,而且它们之间也不存在必然联系。 最后我们再来回顾一下 final 用于类的情况。这个大家应该也很熟悉了,因为我们最常用的 String 类就是 final 的。由于 final 类不允许被继承,编译器在处理时把它的所有方法都当作 final 的,因此 final 类比普通类拥有更 高的效率。final 的类的所有方法都不能被重写,但这并不表示 final 的类的属性(变量)值也是不可改变的, 要想做到 final 类的属性值不可改变,必须给它增加 final 修饰。