之所以要使用final方法,可能是出于对两方面理由的考虑。第一个是为方法“上锁”,防止任何继承类改变它的本来含义。设计程序时,若希望一个方法的行为在继承期间保持不变,而且不可被覆盖或改写,就可以采取这种做法。

采用final方法的第二个理由是程序执行的效率。将一个方法设成final后,编译器就可以把对那个方法的所有调用都置入“嵌入”调用里。只要编译器发现一个final方法调用,就会(根据它自己的判断)忽略为执行方法调用机制而采取的常规代码插入方法(将自变量压入堆栈;跳至方法代码并执行它;跳回来;清除堆栈自变量;最后对返回值进行处理)。相反,它会用方法主体内实际代码的一个副本来替换方法调用。这样做可避免方法调用时的系统开销。当然,若方法体积太大,那么程序也会变得雍肿,可能受到到不到嵌入代码所带来的任何性能提升。因为任何提升都被花在方法内部的时间抵消了。Java编译器能自动侦测这些情况,并颇为“明智”地决定是否嵌入一个final方法。然而,最好还是不要完全相信编译器能正确地作出所有判断。通常,只有在方法的代码量非常少,或者想明确禁止方法被覆盖的时候,才应考虑将一个方法设为final。类内所有private方法都自动成为final。由于我们不能访问一个private方法,所以它绝对不会被其他方法覆盖(若强行这样做,编译器会给出错误提示)。可为一个private方法添加final指示符,但却不能为那个方法提供任何额外的含义。

最新文章

  1. 项目游戏开发日记 No.0x000004
  2. C++/java之间的Socket通信大小端注意事项
  3. Java数组在内存中是如何存放的
  4. jquery 中的一写常用方法
  5. IOS判断网络环境
  6. hdu 3433 A Task Process(dp+二分)
  7. Codeforces Round #277 (Div. 2) B. OR in Matrix 贪心
  8. 我的电脑在用Microsoft Script Editor 调试,关不了?
  9. UILabel文本垂直顶部对齐的方法
  10. YesNo列
  11. 参数解析argparse模块
  12. c++智能指针《二》 std::tr1::shared_ptr
  13. matlab GUI之常用对话框(一)-- uigetfile\ uiputfile \ uisetcolor \ uisetfont
  14. LeetCode OJ 154. Find Minimum in Rotated Sorted Array II
  15. Codeforces #452 Div2 F
  16. java 10 中 var关键字用法
  17. I want to try to improve myself from today
  18. python命名规则
  19. Docker优势
  20. 移动端自动化测试-AppiumApi接口详解

热门文章

  1. JavaScript到底是不是单线程
  2. img list
  3. Mybatis中SqlMapper配置的扩展与应用(3)
  4. XML学习笔记5——XSD复杂数据类型
  5. 【WP 8.1开发】手机客户端应用接收推送通知
  6. android api sdk
  7. The Triumph Of Bio-logic
  8. Datatables 在asp.net mvc中的使用
  9. 使用 CSS & jQuery 制作一款漂亮的多彩时钟
  10. WEB编程中获取src目录下的文件(没有src目录)