背景:听说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;

 @Slf4j
public class TestFinal {
public static void main(String[] args) {
TestFinal.commomMethod();
TestFinal.finalMethod();
}
public static void commomMethod() {
long startTime = System.currentTimeMillis();
int number = 100000000;
long amount = 0l;
for (int i = 0; i < number; i++) {
amount = amount + i;
}
log.info("commomMethod's amount is: "+amount);
long endTime = System.currentTimeMillis();
log.info("commomMethod's amount spend time is: "+(endTime-startTime)+"ms");
}
public final static void finalMethod() {
long startTime = System.currentTimeMillis();
int number = 100000000;
long amount = 0l;
for (int i = 0; i < number; i++) {
amount = amount + i;
}
log.info("finalMethod's amount is: "+amount);
long endTime = System.currentTimeMillis();
log.info("finalMethod‘s amount spend time is: "+(endTime-startTime)+"ms");
}
}

执行结果:

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

Java高阶语法---final的更多相关文章

  1. Java高阶语法---transient

    背景:听说transient Java高阶语法是挺进BAT必经之路. transient: Java中transient 关键字的作用,简单的说就是让某些被修饰的成员属性变量不被序列化. 这又扯到了序 ...

  2. Java高阶语法---static

    背景:听说static Java高阶语法是挺进BAT必经之路. static: 静态static,很多时候会令我望文生义,但是get到了static最重要的一点,其他的理解都还ok. static最重 ...

  3. Java高阶语法---Volatile

    背景:听说Volatile Java高阶语法亦是挺进BAT的必经之路. Volatile: volatile同步机制又涉及Java内存模型中的可见性.原子性和有序性,恶补基础一波. 可见性: 可见性简 ...

  4. Cmd Markdown 高阶语法手册

    『Cmd 技术渲染的沙箱页面,点击此处编写自己的文档』 Cmd Markdown 高阶语法手册 1. 内容目录 在段落中填写 [TOC] 以显示全文内容的目录结构. [TOC] 2. 标签分类 在编辑 ...

  5. Markdown 高阶语法

    记录一些 Markdown 的高阶语法,想起来什么,再更新 分割线 两条分割线 *** *** 插入表格 Column Column Column Row Content Content | Colu ...

  6. Java高阶回调,回调函数的另一种玩法

    工具类package com.sctek; import java.lang.reflect.Field; import android.os.CountDownTimer;import androi ...

  7. Java高阶面试问题合集

    下面总结一下在Java面试中常用的一些问题,不具体解答,我只附上一些精彩的博文链接. Spring IOC AOP 底层原理 JAVA的反射机制和动态代理 Java反射机制和动态代理 多线程 Spri ...

  8. MySQL-5.7 高阶语法及流程控制

    1.标签语句 [begin_label:] BEGIN [statement_list] END [end_label] [begin_label:] LOOP statement_list END ...

  9. Java 高阶 —— try/catch

    // try catch 在 for 循环外 try { for(int i = 0; i < max; i++) { String myString = ...; float myNum = ...

随机推荐

  1. 【react】---17新增的生命周期

    一.废除的生命周期 官网文档指出使用这些生命周期的代码会在未来版本的react中更容易产生bug,尤其是对于异步渲染的版本 由于未来采用异步渲染机制,所以即将在17版本中去掉的生命周期钩子函数 com ...

  2. vux 项目的构建

    一:vux安装 # 安装vuxcnpm install vux --save   # 安装vux-loadercnpm install vux-loader --save-dev   # 安装less ...

  3. Oracle SQL性能优化的40条军规

    1. SQL语句执行步骤 语法分析> 语义分析> 视图转换 >表达式转换> 选择优化器 >选择连接方式 >选择连接顺序 >选择数据的搜索路径 >运行“执 ...

  4. [Swift]LeetCode1 .两数之和 | Two Sum

    Given an array of integers, return indices of the two numbers such that they add up to a specific ta ...

  5. [Swift]LeetCode406. 根据身高重建队列 | Queue Reconstruction by Height

    Suppose you have a random list of people standing in a queue. Each person is described by a pair of ...

  6. [Swift]LeetCode988. 从叶结点开始的最小字符串 | Smallest String Starting From Leaf

    Given the root of a binary tree, each node has a value from 0 to 25 representing the letters 'a' to  ...

  7. 【git】idea /git bash命令 操作分支

    1.需求 因为目前要对项目做一些改动,而项目又即将上线,这些新的改动又不需要一起上线,所以这个时候需要在原有的master分支上重新拉出一个分支进行开发. 2.分支操作 打开git bash工具→切换 ...

  8. java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.love5/com.example.love5.Main11Activity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.

    若有 java.lang.RuntimeException和 java.lang.NullPointerException: Attempt to invoke virtual method 'voi ...

  9. 【Spark篇】---Spark中Master-HA和historyServer的搭建和应用

    一.前述 本节讲述Spark Master的HA的搭建,为的是防止单点故障. Spark-UI 的使用介绍,可以更好的监控Spark应用程序的执行. 二.具体细节 1.Master HA 1.Mast ...

  10. 死磕 java集合之TreeMap源码分析(二)- 内含红黑树分析全过程

    欢迎关注我的公众号"彤哥读源码",查看更多源码系列文章, 与彤哥一起畅游源码的海洋. 插入元素 插入元素,如果元素在树中存在,则替换value:如果元素不存在,则插入到对应的位置, ...