`
如沐春风的小妮
  • 浏览: 68769 次
  • 性别: Icon_minigender_2
  • 来自: 西安
社区版块
存档分类
最新评论

final的使用规则

阅读更多

今天刚刚看到的,希望理解是正确的。大家以辩证的眼光来看待这边博客,不对的地方还望指正。

 

一般而言,final就是声明“这个东西不能改变”。

 

1.final变量

 

被定义为final的变量就会变为一个常数。

 

-----引用------

对于编译期的常数,编译器(程序)可将常数值“封装”到需要的计算过程里。也就是说,计算可在编译期
间提前执行,从而节省运行时的一些开销。

-----引用结束----

 

效率方面主观上我是没有什么体会的,但是使用上的变化还是比较容易感受的到。

 

对于final定义的变量,只能存储一个数值,不能更改。

如final int i = 0;

i在整个的使用过程中,值不能被更改,即i = 2;这样的赋值是错误的。

 

java里没有宏定义,要想定义一个全局的不可更改的静态的常量那就是final和static的结合,而且根据规则,变量名必须为大写:

 

例如:public static final int KEY_ENTER = 22;

 

它就相当于C里面的宏定义:#define KEY_ENTER 22

 

需要说明的是,final 定义的句柄不能更改,但是句柄指向的内容是可以改变的。就好比是C++里的const 指针,指向的地址不能变,但是地址里具体放什么数值,好吧,你可以换的。

 

如果一个函数传入的句柄参数被设置为final(private int aaaa(final View bbb).....)说明传入的参数不希望在函数体内使用时,句柄不想被更改。

2.final方法

 

---------引用------------

之所以要使用final 方法,可能是出于对两方面理由的考虑。第一个是为方法“上锁”,防止任何继承类改
变它的本来含义。设计程序时,若希望一个方法的行为在继承期间保持不变,而且不可被覆盖或改写,就可
以采取这种做法。
采用final 方法的第二个理由是程序执行的效率。将一个方法设成final 后,编译器就可以把对那个方法的
所有调用都置入“嵌入”调用里。只要编译器发现一个final 方法调用,就会(根据它自己的判断)忽略为
执行方法调用机制而采取的常规代码插入方法(将自变量压入堆栈;跳至方法代码并执行它;跳回来;清除

堆栈自变量;最后对返回值进行处理)。相反,它会用方法主体内实际代码的一个副本来替换方法调用。这
样做可避免方法调用时的系统开销。当然,若方法体积太大,那么程序也会变得雍肿,可能受到到不到嵌入
代码所带来的任何性能提升。因为任何提升都被花在方法内部的时间抵消了。Java 编译器能自动侦测这些情
况,并颇为“明智”地决定是否嵌入一个final 方法。然而,最好还是不要完全相信编译器能正确地作出所
有判断。通常,只有在方法的代码量非常少,或者想明确禁止方法被覆盖的时候,才应考虑将一个方法设为
final。

---------引用结束----------

写太好了,我都不知道怎么总结了。你自己看吧。

 

3.final类

 

如果一个类被定义为final.....说明人家不想被你继承啊亲~不过可以正常创建对象去使用哦。

 

 

我发现我说的好简单啊,实际上,我觉得看起来的时候很复杂的呀。我纠结了,是不是我没理解呀,肿么办,要不,我继续看,你看完博客再去看看书,巩固下~~

 

 

分享到:
评论
1 楼 nanapoleon 2012-08-19  
写的挺好的。还有,一个变量,传入到一个内部构造类的时候,也必须定义为final,否则连编译都过不去,挺有意思的。

相关推荐

    Final Draft 10.0.7

    Final Draft是世界上最畅销的剧本...这样一来,你就不需要再多花时间学习剧本的格式应该是什么规则,也不必担心剧本过于凌乱导致他人无法看明白了;Final Draft的价值就是自动为你转换格式成为世界通用的模式和标准。

    FinalData OEM V2.0 简体中文版

    7. FinalData 只能装在licenses规定的数目相等的机器上。除非licenses允许,FinalData不能装在其他的机器上。 FinalData 是FINAL DATA 公司的注册商标。 NTFS, Windows, Windows95, Windows98 and WindowsNT 是...

    Java零基础-final关键字.md

    读者将学习什么是final关键字,为什么需要使用final,以及在不同场景下如何使用final关键字。此外,还会讨论final关键字的一些注意事项和规则。 能学到什么: 理解final关键字的定义、用途和作用范围。 掌握在Java...

    hibernate源码release-4.1.4.Final版

    hibernate-release-4.1.4.Final源码,是学习和使用hibernate的好资源,领略大师的编码规则,掌握高超的编码技术,值得学习!hibernate开发人员必备资料!

    FinalData v2.01.1028 企业版

    --== FinalData v2.01.1028 中文企业版 ==-- Code:NTC38713-9628-009437256777 软件简介: 超级数据恢复工具的特性功能包括:支持FAT16/32和NTFS,恢复完全删除的数据和目录,恢复主引导扇区和FAT表损坏丢失的...

    UL 810A-2017-final.pdf

    3. 电气设备的使用和维护:UL 810A-2017-final.pdf为电气设备的使用和维护提供了统一的标准和指南,确保电气设备的安全性和可靠性。 UL 810A-2017-final.pdf是电气设备安全和检测的重要标准文档,对电气设备制造商...

    UL 2388-2017-final.pdf

    这份文件详细规定了电池的安全要求、测试方法和评估标准,以确保电池的安全使用。 知识点1:电池安全标准 UL 2388-2017-final.pdf对电池的安全标准做出了明确规定。这些标准涵盖了电池的设计、制造、测试和包装等...

    Final_Draft_11_11.1.0.zip

    Final Draft是世界上最畅销的剧本...这样一来,你就不需要再多花时间学习剧本的格式应该是什么规则,也不必担心剧本过于凌乱导致他人无法看明白了;Final Draft的价值就是自动为你转换格式成为世界通用的模式和标准。

    Final Draft 12.0.2 Build 70.rar

    Final Draft是世界上最畅销的剧本...这样一来,你就不需要再多花时间学习剧本的格式应该是什么规则,也不必担心剧本过于凌乱导致他人无法看明白了;Final Draft的价值就是自动为你转换格式成为世界通用的模式和标准。

    UL 746C-2020-04-final.pdf

    UL 746C-2020-04-final.pdf文档的主要内容可能涵盖了电气产品的安全测试和認证要求,包括产品设计、制造、测试和認证的标准和规定。此外,该文档也可能涵盖了电气产品的安全风险评估、故障分析和改进方法等方面的...

    UL3703标准中文版-2020太阳能跟进器UL中文版标准-final.pdf

    在本标准文件中,UL3703标准中文版-2020太阳能跟进器UL中文版标准-final.pdf对太阳能跟进器的安全性和性能进行了详细的规定。该标准涵盖了太阳能跟进器的电气安全、机械安全、环境测试和性能测试等方面。 太阳能...

    UL498-2019 插头插座中文版标准-final.pdf

    UL498-2019 插头插座中文版标准-final.pdf 是一份关于插头插座的工业标准文档,该文档规定了插头插座的设计、制造、测试和认证要求。本文档对插头插座的各个方面进行了详细的规定,以确保插头插座的安全性、可靠性和...

    UL 4248-1 2017-10-final.pdf

    测试和认证方面,UL 4248-1 2017-10-final.pdf 文件规定了电子设备的测试和认证要求,包括设备的电气测试、机械测试、热测试和防火测试等。该文件还提供了电子设备的认证程序,旨在确保电子设备符合相关的安全标准和...

    深入理解Java final变量的内存模型

    对于 final 域,编译器和处理器要遵守两个重排序规则:  在构造函数内对一个 final 域的写,与随后把这个构造对象的引用赋值给一个变量,这两个操作之间不能重排序  初次读一个包含 final 域的对象的引用,与...

    深入理解Java内存模型??final

    对于final域,编译器和处理器要遵守两个重排序规则:  1、在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序。  2、初次读一个包含final域的对象...

    UL507标准-2020风扇UL标准-final.pdf

    * 风扇产品的安装和使用:UL507标准对风扇产品的安装和使用进行了详细的规定,包括安装要求、使用要求和维护要求等方面。 UL507标准-2020风扇UL标准-final.pdf文件为风扇产品的安全标准,旨在确保风扇产品的安全性...

    drools-6.2-final文档

    Drools是入门CEP(复合事件处理)引擎不错的选择,特别是你还是一个java工程师,它的规则引擎很好理解,性能也很好。特别推荐这个官方文档,虽然是英文版的,现在网上也找不到中文版的。不过我打算自己翻译,将会在...

    drools-distribution-7.7.0.Final

    drools规则引擎相关文件, 源码:\drools-distribution-7.7.0.Final\sources\drools-core-7.7.0.Final-sources.jar、 jar包:\drools-distribution-7.7.0.Final\binaries\drools-core-7.7.0.Final.jar、 API:\...

    接口,多态,抽象类,final

    在 Java 中,包命名规则按照功能、域名后缀、组织名、项目名、功能来命名。权限访问修饰符包括 public、protected、default、private 等四种。 6. 静态关键字 静态关键字可以用来修饰属性、方法、代码段。静态方法...

    CNCA-C11-01:2020 强制性产品认证规则(汽车)-final.zip

    CNCA-C11-01:2020 强制性产品认证规则(汽车)-final.zip

Global site tag (gtag.js) - Google Analytics