JavaSE-关键字final
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的更多相关文章
- Java关键字final、static
一.final根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类.非抽象类成员方法和变量.你可能出于两种理解而需要阻止改变:设计或效率. final ...
- final关键字(final是最终的)
final关键字(final是最终的) 1.final修饰特点 a.修饰类,类不能被继承 b.修饰变量,变量就变成了常量, 修饰基本数据类:final int num = 10; 修饰引用数据类型变量 ...
- 【转】Java关键字final、static使用总结
转自:http://lavasoft.blog.51cto.com/62575/18771/ Java关键字final.static使用总结 一.final 根据程序上下文环境, ...
- Java关键字final、static使用总结
Java关键字final.static使用总结 一.final 根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类.非抽象类成员方 ...
- 转!Java关键字final、static使用总结
Java关键字final.static使用总结 一.final 根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类.非抽象类成员方法和变量.你可 ...
- Java关键字final、static使用总结(转)
Java关键字final.static使用总结 一.final 根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类.非抽象类成员方 ...
- (转)Java关键字final、static使用总结
一.final 根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类.非抽象类成员方法和变量.你可能出于两种理解而需要阻止改变:设计或效率. fin ...
- [Java] 关键字final、static使用总结
一.final 根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类.非抽象类成员方法和变量.你可能出于两种理解而需要阻止改变:设计或效率.final ...
- JAVA基础知识(2)--关键字final的使用
/***Final关键字的使用*@author lihaiming*Email:912547587@qq.com*关键字Final可以修饰属性,方法,类*修饰属性的时候,final修饰的变量是一个常量 ...
- 关键字final整理
关键字final整理 由于语境(应用环境)不同,final 关键字的含义可能会稍微产生一些差异.但它最一般的意思就是声明"这个东西不能改变".之所以要禁止改变,可能是考虑到两方面的 ...
随机推荐
- c#命名规范(转载)
出处:脚本之家 链接:http://www.jb51.net/article/57163.htm 注重代码书写的程序员应该是一个比较有修养的人,下面这些命名规则不一定要绝对遵从,但值得参考.在应用规则 ...
- FortiGate日志中session clash
1.出现于:FortiGate v5.0和v5.2 2.出现原因 Session clash messages appear in the logs when a new session is cre ...
- 187. Repeated DNA Sequences重复的DNA子串序列
[抄题]: All DNA is composed of a series of nucleotides abbreviated as A, C, G, and T, for example: &qu ...
- R 语言安装
在linux下,对于手动安装的软件,当时间长了,我们就会忘记安装这个软件的细节.这就不利于以后软件的卸载工作了.而yum则会帮我们记住相关安装细节,当软件被卸载的时候,没用的文件也会一并被删除.因此, ...
- linux命令大全(1)
当用户使用linux系统时,其实在和Shell在打交道,当用户发出指令,其实先将这些指令发送给Shell, 然后由Shell将用户的指令翻译后传送给内核,再由内核来控制硬件的工作. 然后内核将硬件的工 ...
- zeromq学习记录(四)使用ZMQ_ROUTER ZMQ_DEALER
/************************************************************** 技术博客 http://www.cnblogs.com/itdef/ ...
- day30
作业 #__author : 'liuyang' #date : 2019/4/11 0011 下午 12:36 # 这两天 1.软件开发规范 不写 没法做新作业 #2. 认证+上传 +下载 + 校验 ...
- using五大用法
1.命名空间 using namespace 命名空间;//这样每次使用命名空间中的变量时就不用指定命名空间了 注意:头文件中不应有using命名空间的声明 2.类型别名(C++11) using a ...
- Alpha冲刺 - (4/10)
Alpha冲刺 - (4/10) Part.1 开篇 队名:彳艮彳亍团队 组长博客:戳我进入 作业博客:班级博客本次作业的链接 Part.2 成员汇报 组员1(组长)柯奇豪 过去两天完成了哪些任务 ...
- http响应头里没有或者有content-length的几种可能性
对于http的请求返回结果要进行内容的长度校验主要有两种方式,二者互斥使用 1.客户端在http头(head)加Connection:keep-alive时,服务器的response是Transfer ...