# 基本语法
这里讲讲一些关键的语法
# final 关键字
根据上下文环境,final 的含义存在细微区别。通常它指的是“这是无法改变的”。下面分别从 数据,方法和类 三个方面来讲讲 final。
# final 数据
许多编程语言都有某种方法来告诉编译器,一块数据是恒定不变的。有时数据的恒定不变是很有用的,例如:
- 一个永不改变的编译时常量。
- 一个在运行时被初始化的值,而你不希望它被改变。
对于编译器常量的情况,编译器可以将该常量值代入任何可能用到它的计算式中,也就是说可以在编译期间执行计算式,减轻了一些运行时的负担。在 Java 中,这类常量必须是基本数据类型,并且以关键字 final 表示。在对这个常量进行定义时,必须对其进行赋值。
而对对象引用而不是基本数据类型运用 final 时,含义是:一旦引用被初始化指向某个对象,就无法再把它指向另外一个对象。然后,对象其自身却是可以被修改的。Java 并未提供使任何对象恒定不变的途径(但可以自己编写类以取得使对象恒定不变的效果)。这一限制同样适用于数组,它也是对象。
# final 方法
使用 final 方法的目的有两个。
- 想把方法锁定,以防止任何继承类修改它的含义。这是出于设计的考虑,想要确保在继承中使方法行为保持不变,并且不会被覆盖。
- 在早期的 Java 版本中,还可能会因为效率使用 final,使用 final 后,会同意编译器使用内嵌调用。在 Java SE5/6后,应该让编译器和 JVM 去处理效率问题。
# final 类
当将某个类的整体定义为 final 时,就表明了你不打算继承该类,而且也不允许别人这样做。
这里需要注意,final 类的域可以根据个人的意愿选择为是或者不是 final。不论类是否被定义为 final,与其域是否 final 无关。但是,由于 final 类禁止继承,所以 final 类中的所有方法都隐式指定为 final 的。