`
如沐春风的小妮
  • 浏览: 69749 次
  • 性别: 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 glow插件

    直线教程网.txt可能是一个包含Final Glow插件使用教程的文档,帮助用户了解如何有效地利用该插件来优化他们的3D场景。这些教程通常会涵盖插件的安装步骤、界面介绍、参数调整以及实际案例的应用,旨在帮助初学者快速...

    Final IK v1.7.unitypackage.zip

    总之,Final IK v1.7 unitypackage 是Unity开发者手中的一款利器,它将复杂的IK技术简化为易于使用的工具,提升了游戏和互动体验的品质。通过熟练掌握和应用Final IK,开发者能够创造出更加生动、真实的3D角色动画。

    Java final关键字

    此外,`final`关键字还有其他用途,如`final`修饰的匿名内部类和`final`局部变量在匿名内部类中的特殊规则,以及`final`与`static`结合时的静态常量等。理解并熟练应用`final`关键字对于编写高效、安全的Java代码至...

    Final Draft 10.0.7

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

    数据救复FINALDATA201.RAR

    FinalData的命名规则往往反映出其版本信息,"201"可能是该软件的一个特定版本,暗示着它可能拥有更先进的数据恢复算法和优化的用户体验。软件的主要功能集中在对硬盘、U盘、SD卡等存储设备上的数据进行深度扫描和...

    Final IK 2.0.zip

    2. **脚部定位(Foot IK)**:Final IK提供了先进的脚部定位算法,确保角色的脚尖在行走、跑动时准确地与地形匹配,无论是平地还是不规则表面,都能呈现出自然的步态。 3. **手指IK(Finger IK)**:对于需要精细...

    FinalData OEM V2.0 简体中文版

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

    drools-distribution-6.5.0.Final

    4. **决策表(Decision Table)**:Drools 支持使用 Excel 或 CSV 格式的决策表来编写规则,使得规则更加直观易懂。 5. **规则推理**:Drools 的核心算法基于 RETE 算法,能够高效地处理大量的规则和事实,实现快速...

    JavaSE024static与final使用陷阱续..pdf

    以下是一些关于`final`变量使用的规则: 1. **声明时赋值**:可以直接在声明`final`变量时为其赋值,如`final int a = 0;`。 2. **构造方法赋值**:也可以在声明时不赋值,但在类的所有构造方法中都要为该`final`...

    final类,方法,变量

    例如,`Object`类的`equals()`和`hashCode()`方法被声明为`final`,以确保所有类都遵循统一的比较和哈希计算规则。 然后是`final`变量。`final`变量可以被视为常量,一旦赋值后就不能改变。对于类级别的`final`变量...

    java final变量详解

    Java final 变量详解 Java 中的 final 变量是指不能被改变的变量,它有三个方面的作用:修饰变量、修饰方法和修饰类。...但是,final 变量的使用也需要遵守一定的规则,例如变量的初始化顺序、内存分配方式等。

    深入理解Java中的final关键字_动力节点Java学院整理

    使用 `final` 关键字时,还有一些具体规则: 1. 对于成员变量,`final` 必须在声明时初始化或在构造器中初始化。 2. 局部变量必须在声明时立即赋值。 3. 匿名类中的所有变量必须是 `final` 的。 4. `final` 方法不能...

    apache axis 1.4 final

    Apache Axis 1.4 Final 是一个历史悠久且广泛使用的SOAP(Simple Object Access Protocol)Web服务框架,主要用于构建和部署Web服务。这个版本是Axis 1.x系列的一个稳定版本,发布于2009年,旨在提供可靠的SOAP通信...

    FinalData.2.0.1.1028.企业绿色版

    FinalData是一款著名的数据恢复软件,尤其在企业环境中广泛使用,以它的高效能和可靠性而著称。版本2.0.1.1028是该软件的一个特定更新,旨在提供增强的功能和修复可能存在的问题。这个"企业绿色版"特别针对企业用户...

    Java端集成drools6.4.0.Final

    Java端集成Drools 6.4.0.Final是一个重要的技术实践,它涉及到规则引擎在Java应用程序中的应用。Drools是一个开源的业务规则管理系统(BRMS),它基于Java平台,提供了一种灵活的方式来管理和执行业务规则。下面将...

    Eclipse设置保存时自动给变量加final

    这个功能对于遵循某些编码规范,比如Google Java Style Guide或Oracle Code Conventions的团队来说特别有用,因为它们推荐尽可能使用`final`变量。不过,需要注意的是,过度使用`final`也可能降低代码的灵活性,所以...

    hibernate-validator-4.1.0.Final.rar

    包含了4.1.0.Final版本的API文档,开发者可以通过查阅这个文档了解各个类和方法的功能,快速学习和使用Hibernate Validator。 5. **.jar文件**: `hibernate-validator-4.1.0.Final.jar`是核心库,包含了所有验证...

    Java 多线程与并发(6-26)-关键字- final详解.pdf

    本文将详细解释Java多线程与并发中关键字final的使用和实现原理,并讨论final的限制条件和局限性。 一、final关键字的基本使用 final关键字是Java语言中的一个关键字,用于修饰类、方法、变量等。final关键字的...

    netty-4.1.16.Final.jar netty全部jar及源码

    - **README.md**:这是一个Markdown格式的文件,通常包含项目的基本信息、使用指南、贡献规则等内容。 - **CONTRIBUTING.md**:描述了如何向Netty项目贡献代码或参与开发的规则和流程。 - **LICENSE.txt**和**NOTICE...

    hibernate-3.6.7.final 官方中文 API

    了解并掌握对象状态的转换规则对于理解和使用Hibernate至关重要。 10. **性能优化**: 包括批处理操作、懒加载、预加载、连接池的使用等,都是Hibernate性能优化的关键点。 通过《Hibernate 3.6.7.Final 官方中文 ...

Global site tag (gtag.js) - Google Analytics