final修饰数据:

  final修饰基本数据类型,使数值恒定不变,修饰对象引用,final使引用恒定不变

  final修饰的成员变量必须要被初识化

  final可以修饰方法中的参数列表,被修饰的参数无法在方法中更改参数引用所指向的对象

  final和static修饰的成员变量表示常量

final修饰方法:

  final修饰方法的原因有两个,一是把方法锁定,以防任何继承类修改它的含义,确保在继承中使方法行为保持不变,

  并且不会被覆盖;另一原因是效率。在早期java实现中,如果将方法指明为final,就是同意编译器将针对该方法的

  所有调用都转为内嵌调用。现在的java虚拟机会自动探测到这种情况,不需要通过final修饰方法而提高效率。

  类中所有的private方法都隐式的指定为是final的。

final修饰类:

  类被final修饰,表明该类不能被继承(String就是final的)

final的内存语意:

  final域的重排序规则:

    对于final域,编译器和处理器要遵守两个重排序规则

    (1) 在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序。

    (2)初次读一个包含final域的对象的引用,与随后初次读这个final域,这两个操作之间不能重排序。

  写final域的重排序规则:

    写final域的重排序规则禁止把final域的写重排序到构造函数之外。这个规则包含两个方面:

    (1)JMM禁止编译器把final域的写重排序到构造函数之外。

    (2)编译器会在final域的写之后,构造函数returen之前,插入一个StoreStore屏障。这个屏障禁止处理器把final域的写重排序

     到构造函数之外。

  读final域的重排序规则:

    读final域的重排序规则是,在一个线程中,初次读对象引用与初次读该对象包含的final域,JMM禁止处理器重排序这两个操作

    (这个规则仅针对处理器)。编译器会在读final域操作的前面插入一个LoadLoad屏障。

  final域为引用类型:

    上面讲到的都是基础数据类型,那么对于引用类型是怎样的呢?对于引用类型,写final域的重排序规则对编译器和处理器增加

    了如下约束:在构造函数内对一个final引用的对象的成员域的写入,与随后在构造函数外吧这个被构造对象的引用赋值给一个

    引用变量,这两个操作之间不能重排序。

JavaSE-关键字final的更多相关文章

  1. Java关键字final、static

    一.final根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类.非抽象类成员方法和变量.你可能出于两种理解而需要阻止改变:设计或效率. final ...

  2. final关键字(final是最终的)

    final关键字(final是最终的) 1.final修饰特点 a.修饰类,类不能被继承 b.修饰变量,变量就变成了常量, 修饰基本数据类:final int num = 10; 修饰引用数据类型变量 ...

  3. 【转】Java关键字final、static使用总结

    转自:http://lavasoft.blog.51cto.com/62575/18771/   Java关键字final.static使用总结   一.final        根据程序上下文环境, ...

  4. Java关键字final、static使用总结

    Java关键字final.static使用总结   一.final        根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类.非抽象类成员方 ...

  5. 转!Java关键字final、static使用总结

    Java关键字final.static使用总结   一.final 根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类.非抽象类成员方法和变量.你可 ...

  6. Java关键字final、static使用总结(转)

    Java关键字final.static使用总结   一.final        根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类.非抽象类成员方 ...

  7. (转)Java关键字final、static使用总结

    一.final  根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类.非抽象类成员方法和变量.你可能出于两种理解而需要阻止改变:设计或效率. fin ...

  8. [Java] 关键字final、static使用总结

    一.final 根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类.非抽象类成员方法和变量.你可能出于两种理解而需要阻止改变:设计或效率.final ...

  9. JAVA基础知识(2)--关键字final的使用

    /***Final关键字的使用*@author lihaiming*Email:912547587@qq.com*关键字Final可以修饰属性,方法,类*修饰属性的时候,final修饰的变量是一个常量 ...

  10. 关键字final整理

    关键字final整理 由于语境(应用环境)不同,final 关键字的含义可能会稍微产生一些差异.但它最一般的意思就是声明"这个东西不能改变".之所以要禁止改变,可能是考虑到两方面的 ...

随机推荐

  1. 动画之一:视图动画 View Animation

    原文:https://blog.csdn.net/pzm1993/article/details/77167049 view动画支持4中动画效果,分别是: 透明度动画(AlphaAnimation) ...

  2. swift - UIButton按钮有图片是点击高亮 有灰色动画

    取消 高亮的 动画 btn.adjustsImageWhenHighlighted = false btn.layer.removeAllAnimations()

  3. [leetcode]55. Jump Game青蛙跳(能否跳到终点)

    Given an array of non-negative integers, you are initially positioned at the first index of the arra ...

  4. mysql数据库导入与导出

    导出 导出数据和表结构: mysqldump -u用户名 -p 数据库名 > 数据库名.sql mysqldump -uroot -p dbname > dbname .sql      ...

  5. ES之五:ElasticSearch聚合

    前言 说完了ES的索引与检索,接着再介绍一个ES高级功能API – 聚合(Aggregations),聚合功能为ES注入了统计分析的血统,使用户在面对大数据提取统计指标时变得游刃有余.同样的工作,你在 ...

  6. BootStrap常用组件及响应式开发

    BootStrap常用组件 PS:所有的代码必须写在<class="container/container-fluid">容器当中 常用组件包含内容: 字体图标 下拉菜 ...

  7. Java SSM 框架相关基础面试题

    一.Spring 面试题 1. Spring 在 SSM 中起什么作用? Spring 是轻量级框架,作用是作为 Bean 工厂,用来管理 Bean 的声明周期和框架集成. Spring 的两大核心: ...

  8. Python:每日一题003

    题目: 一个整数,它加上100和加上268后都是一个完全平方数,请问该数是多少? 程序分析: 在10000以内判断,将该数加上100后再开方,加上268后再开方,如果开方后的结果满足如下条件,即是结果 ...

  9. 【APP测试(Android)】--客户端数据库

  10. python黑帽子-黑客与渗透测试编程之道(源代码)

    链接: https://pan.baidu.com/s/1i5BnB5V   密码: ak9t