首页 > 代码库 > final修饰符的难点记录
final修饰符的难点记录
今天看到了final字段这块,把不会的或者难点记录下来。
第一,空白final。
书上说的有点绕,说空白final更灵活。但之前又说过final变量必须进行初始化,这是什么意思呢,二者难道有冲突吗?
其实空白final的核心就是:构造器赋值。
<script src=http://www.mamicode.com/"https://code.csdn.net/snippets/401447.js"></script>
第二,static final 同 final 的区别。
以前我提过,static字段只会初始化一次,无论你创建多少个对象。那么static final 和 final的区别也在此。
<script src=http://www.mamicode.com/"https://code.csdn.net/snippets/401503.js"></script>
执行结果为:
第一次初始化 a = 33
第二次初始化 a = 64
第一次初始化 b = 20
第二次初始化 b = 20
第三,关于final修饰的方法作用—方法锁定、效率。
方法锁定简单,防止子类继承,再重写之。例如 String
效率这块,现在的JAVA 5以上的版本,JVM会自动处理这块的效率,所以,不需要考虑为了加快调用速度而是用final。
第四,private final修饰。
当你要隐藏某种实现,并确保这种实现在任何情况都不需要修改的情况下,才能使用这个。
第五,final类。
不想被任何人继承。同第四点类似,只是范围扩大到类。final类中所有的方法默认为final方法、所有的变量默认为final变量。
第一,空白final。
书上说的有点绕,说空白final更灵活。但之前又说过final变量必须进行初始化,这是什么意思呢,二者难道有冲突吗?
其实空白final的核心就是:构造器赋值。
<script src=http://www.mamicode.com/"https://code.csdn.net/snippets/401447.js"></script>
第二,static final 同 final 的区别。
以前我提过,static字段只会初始化一次,无论你创建多少个对象。那么static final 和 final的区别也在此。
<script src=http://www.mamicode.com/"https://code.csdn.net/snippets/401503.js"></script>
执行结果为:
第一次初始化 a = 33
第二次初始化 a = 64
第一次初始化 b = 20
第二次初始化 b = 20
第三,关于final修饰的方法作用—方法锁定、效率。
方法锁定简单,防止子类继承,再重写之。例如 String
效率这块,现在的JAVA 5以上的版本,JVM会自动处理这块的效率,所以,不需要考虑为了加快调用速度而是用final。
第四,private final修饰。
当你要隐藏某种实现,并确保这种实现在任何情况都不需要修改的情况下,才能使用这个。
第五,final类。
不想被任何人继承。同第四点类似,只是范围扩大到类。final类中所有的方法默认为final方法、所有的变量默认为final变量。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。