final关键字的使用
题记:
起这个标题时,我想到,作为一个三四年经验的Java程序员,这个话题未免显得有些基础。这么想,是因为我一直不认为应该把博客当成书本知识点(或者说语言文档)的复述者,然而最近复习《Thinking in Java》一书,某些知识点,也不是那么容易拍胸脯说不会遗忘。按照惯例,是做了纸质的读书笔记的。想到这,我灵机一动,干脆在博客里建个《Thinking in Java》读书笔记分类吧,一则可以解释内容为何这么基础——毕竟读书笔记。二则了我心愿,记录自己容易遗忘的点加以备忘,解决纸质读书笔记可能丢失的问题。最后一点,Last but not least,想写博客但一直没什么素材和动力,不妨借此进行习惯养成吧。
该读书笔记系列主要以问答的形式展开,毕竟大多数知识点还是了解的,设问的方式可以调动对知识的回忆。
——2017-01-03
1.关键字Final可以出现在那些代码区域?
- 属性
- 方法
- 类
代码区域是啥?我是没找到合适的词来形容就这么说了。
2.Final域何时使用?
名词解释 域,一般又称为属性,即OOP思想中对象所存储的其他对象。因为《Thinking in Java》中文版一书中翻译成域,因此沿用,本系列文章中会混用。
对属性使用Final是为了限制属性被修改。从域是否定义时被初始化可以分为两种情况:
- 空白Final,即属性定义时没有给定初值。具有一定灵活性,可以在构造器中初始化,使初值有独特性。
- 定义时给定初值。一般用于常量。
从属性的类型信息来看,Final域分为两种:
- Final修饰的是基本类型。值将不能被修改。
- Final修饰的是引用类型。引用将不能被修改。但对象的属性可以被修改。
3.Final方法何时使用?
防止继承该方法时使用。
为什么有时要防止继承一个方法?
- 处于设计考虑,希望语义不被改变
- 为了在类的构造器中安全的调用该方法。避免臭名昭著的子类覆盖父类方法,父类构造器却调用了该方法名造成难以分辨的调用关系的问题,详见http://padeoe.com/java-inherit-problems/#p4
3.Final类何时使用
禁止继承该类时使用。
为什么有时要防止继承一个类?一般是出于设计考虑或者安全考虑。
共有 0 条评论