千家信息网

Java final的用法有哪些

发表于:2024-11-27 作者:千家信息网编辑
千家信息网最后更新 2024年11月27日,这篇文章主要介绍"Java final的用法有哪些",在日常操作中,相信很多人在Java final的用法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Java
千家信息网最后更新 2024年11月27日Java final的用法有哪些

这篇文章主要介绍"Java final的用法有哪些",在日常操作中,相信很多人在Java final的用法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Java final的用法有哪些"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

"谈谈final、finally、finalize有什么不同?"

这是个非常经典的问题。

finally是Java保证重点代码一定要被执行的一种机制。

finalize是基础类java.lang.Object的一个方法,它的设计目的是保证对象在被垃圾收集前完成特定资源的回收。

今天我们重点谈谈final,多年的面试经验告诉我,很多人其实失分就是在final上,而非另外两者。final可以用来修饰类、方法、变量,分别有不同的意义。

1.final修饰的class代表不可被继承扩展;

2.final修改的方法表示不可被重写(override);

3.final修饰的变量是不可被修改的。

如果你能够给出上面的回答,至少及格了。但是这样的回答隐藏掉了很多信息,这里真正有变化的是当final修饰变量的时候。

首先,以上叙述还不够准确,精确地说"final修饰的变量一旦被赋值将不可被修改"。

请看如下代码:

public class MyClass { public MyClass(int foo) { this.foo = foo; } private final foo; }

在这段代码中类MyClass的成员变量foo被修饰为final,但并没有对其赋值,而是在构造函数中为其指定的取值。

当然你不能就此认为"final修饰的变量是不可被修改的"说法错误,但至少没有表达出这层意思。

其实Java语言这样设计是有道理的,利用这一特性可以达到这样的目的:当我们发明一个类的时候,有时会发现有一些需要外部传入的参数,我们希望一旦被确定后,在对象被销毁之前不希望其被改变。遇到这种情况,我们就可以将这些参数定义为final的成员变量,然后外界只能够通过构造函数的参数指定。

final是否可以用来修饰函数参数或者内部变量?

答案是肯定的。事实上这种行为是被推荐的,因为这样可以确保变量不会被意外修改。而且被final修饰过的变量与参数还可以被传递给匿名类,例如:

Java在实现内部类时,实际会拷贝一份,不是去直接使用局部变量,final在这里可以防止出现数据一致性的问题。

外界有很多文章或者数据中还会介绍,final也许会有性能的好处。

比如,利用final可能有助于JVM将方法进行内联,可以改善编译器进行条件编译的能力等等。

坦白说,很多类似的结论都是基于假设得出的,比如现在高性能JVM(如HotSpot)判断内联未必依赖final的提示,要相信JVM还是非常智能的。

类似的,final变量对性能的影响,大部分情况下,并没有考虑的必要。不要指望这样的小技巧带来所谓的性能好处。相反,使用final更重要的理由,应该是为提高代码可读性,防止变量被意外修改。

***还要强调,final虽然会带来不可变的效果,但并不意味着任何情况下都是如此。比如final修饰java.util.List类型的变量,并不会防止列表内容被修改。实际的效果是防止变量指向的List对象不会被再次创建。而如果你需要的是一个不允许修改的List,则可以使用Collections.unmodifiableList()得到。

到此,关于"Java final的用法有哪些"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

变量 参数 方法 代码 学习 函数 对象 性能 情况 问题 不同 意外 外界 好处 实际 成员 效果 数据 文章 时候 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 形容网络技术好的词语 宁夏回族自治区网络安全总队 批量更新多个数据库表 GWASdb数据库有几个版本 河南智慧社区软件开发系统 网络安全有名的培训学校有哪些 计算机网络技术项目小组 大智慧代理服务器超时 网络安全法治主题日 给数据库赋予其他数据库表的权限 魔数软件开发 惠普服务器管理口默认密码 最安全的文件服务器搭建方法 一个服务器可以用几个短信签名 计算机网络技术专业学术水平 常用文献检索网站和数据库包括 东莞旅游软件开发架构 华为云服务器数据导出 数据库 读取 excel 武汉对日软件开发公司排名 数据库查询以map方式存储 数据库分页查询计算 网络安全法治主题日 吃鸡国际服换错服务器怎么办 数据库的安全需求有哪些 软件开发团队技术发展 易语言tcp需要服务器吗 学生会网络技术部竞选演讲稿 汽车信息安全软件开发公司 中华人民共和国网络安全局
0