final可以用来修饰类、成员、方法。
1. 修饰类
通常表示该类不允许被继承,譬如String。
- final类中的成员方法都会被隐式地指定为final方法
- final类中的成员变量可以根据需要设为final。
2. 修饰方法
《java编程思想》 :
使用final方法的原因有两个。第一个原因是把方法锁定,以防任何继承类修改它的含义;第二个原因是效率。在早期的Java实现版本中,会将final方法转为内嵌调用。但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升。在最近的Java版本中,不需要使用final方法进行这些优化了。
通常称之为静态方法,是没有this对象的方法,因此不能访问任何非静态变量和方法。也就是在方法中不能使用this、super关键字。
- class的private方法会被隐式的指定为final(因为该方法不能被子类所访问)
- abstract与final不能同时使用。final阻止重写和继承的
3. 修饰变量
通常称之为常量,只能被赋值一次,赋值后值不再改变。必须要显示初始化。这里有两种初始化方式,
- 变量声明的时候初始化
- 在声明变量的时候不赋初值,但是要在这个变量所在的类的所有的构造函数中对这个变量赋初值。
- 只有在编译期间能确切知道final变量值的情况下,编译器才会进行这样的优化,如果final变量赋值是指向一个函数的话也不能优化。
- 引用变量被final修饰之后,虽然不能再指向其他对象,但是它指向的对象的内容是可变的
- interface的成员变量将会被隐式的指定为final
- final类型的参数:java采用值传递,即便不用final,也不影响方法外的变量。
网友评论