final关键字的使用

final关键字的使用

题记:

起这个标题时,我想到,作为一个三四年经验的Java程序员,这个话题未免显得有些基础。这么想,是因为我一直不认为应该把博客当成书本知识点(或者说语言文档)的复述者,然而最近复习《Thinking in Java》一书,某些知识点,也不是那么容易拍胸脯说不会遗忘。按照惯例,是做了纸质的读书笔记的。想到这,我灵机一动,干脆在博客里建个《Thinking in Java》读书笔记分类吧,一则可以解释内容为何这么基础——毕竟读书笔记。二则了我心愿,记录自己容易遗忘的点加以备忘,解决纸质读书笔记可能丢失的问题。最后一点,Last but not least,想写博客但一直没什么素材和动力,不妨借此进行习惯养成吧。

该读书笔记系列主要以问答的形式展开,毕竟大多数知识点还是了解的,设问的方式可以调动对知识的回忆。

——2017-01-03

1.关键字Final可以出现在那些代码区域?

  1. 属性
  2. 方法

代码区域是啥?我是没找到合适的词来形容就这么说了。

2.Final域何时使用?

名词解释
域,一般又称为属性,即OOP思想中对象所存储的其他对象。因为《Thinking in Java》中文版一书中翻译成域,因此沿用,本系列文章中会混用。

对属性使用Final是为了限制属性被修改。从域是否定义时被初始化可以分为两种情况:

  1. 空白Final,即属性定义时没有给定初值。具有一定灵活性,可以在构造器中初始化,使初值有独特性。
  2. 定义时给定初值。一般用于常量。

从属性的类型信息来看,Final域分为两种:

  1. Final修饰的是基本类型。值将不能被修改。
  2. Final修饰的是引用类型。引用将不能被修改。但对象的属性可以被修改。

3.Final方法何时使用?

防止继承该方法时使用。

为什么有时要防止继承一个方法?

  1. 处于设计考虑,希望语义不被改变
  2. 为了在类的构造器中安全的调用该方法。避免臭名昭著的子类覆盖父类方法,父类构造器却调用了该方法名造成难以分辨的调用关系的问题,详见http://padeoe.com/java-inherit-problems/#p4

3.Final类何时使用

禁止继承该类时使用。

为什么有时要防止继承一个类?一般是出于设计考虑或者安全考虑。

发表评论

电子邮件地址不会被公开。