• 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

  • 相关阅读:
    什么是socket ??
    WebView的使用
    UIWebView 使用
    UIWebView与JavaScript的交互
    iOS中UIWebView使用JS交互
    iOS app支付宝接口调用的一点总结(补充支付宝SDK&Demo下载地址)
    51单片机 按键,键盘检测
    51单片机 数码管的显示与译码器
    C51数据类型扩充定义
    STC12C5A60S2 内部AD+1602显示
  • 原文地址:https://www.cnblogs.com/taojietaoge/p/10259437.html
Copyright © 2020-2023  润新知