Java高阶语法---final

背景:听说final Java高阶语法是挺进BAT必经之路。

 

final:

final关键字顾名思义就是最终不可改变的。

1、含义:final可以声明成员变量、方法、类和本地变量;一旦将引用声明为final,此引用将不再被改变,编译器会检查代码,如果试图将此变量再次初始化则编译器会报告编译错误。

2、方法:方法前使用final修饰则代表该方法不可被子类的方法重写(private类型的方法默认是final类型的);如果认为一个方法的功能已经很perfect了,子类中不需要再做改变,大可声明此方法为final类型的,因为final方法比非final类型的方法执行速度要快,前者在编译的时候已经静态绑定了,无需在运行时再动态绑定。

3、类:使用final修饰的类通常功能是perfect的,其不能被继承。(Java中的final类,如:Integer、String、Boolean以及其他包装类)这种不可改变类有很多好处,如:它们的对象是只读的,可以在多线程环境下安全共享,不用额外的同步开销等。

4、优势:final关键字可提高性能,JVM和Java应用都会缓存final变量;final变量可以安全地在多线程环境下无需额外同步开销实现共享;高效,使用final关键字JVM会对方法、变量及类进行优化,编译器在遇到调用final方法时会转入内嵌机制,大幅度提高了方法执行效率。

我撸了个小例子测试,同样的代码final类型的方法执行用368ms,非final类型的方法用了384ms,有图有据。

FYI:

复制代码
 1 import lombok.extern.slf4j.Slf4j;
 2 
 3 @Slf4j
 4 public class TestFinal {
 5     public static void main(String[] args) {
 6         TestFinal.commomMethod();
 7         TestFinal.finalMethod();
 8     }
 9     public static void commomMethod() {
10         long startTime = System.currentTimeMillis();
11         int number = 100000000;
12         long amount = 0l;
13         for (int i = 0; i < number; i++) {
14             amount = amount + i;
15         }
16         log.info("commomMethod's amount is: "+amount);
17         long endTime = System.currentTimeMillis();
18         log.info("commomMethod's amount spend time is: "+(endTime-startTime)+"ms");
19     }
20     public final static void  finalMethod() {
21         long startTime = System.currentTimeMillis();
22         int number = 100000000;
23         long amount = 0l;
24         for (int i = 0; i < number; i++) {
25             amount = amount + i;
26         }
27         log.info("finalMethod's amount is: "+amount);
28         long endTime = System.currentTimeMillis();
29         log.info("finalMethod‘s amount spend time is: "+(endTime-startTime)+"ms");
30     }
31 }
复制代码

执行结果:

- commomMethod's amount is: 4999999950000000
- commomMethod's amount spend time is: 384ms
- finalMethod's amount is: 4999999950000000
- finalMethod‘s amount spend time is: 368ms

 

posted @   涛姐涛哥  阅读(790)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示