Java的final修饰符

这篇具有很好参考价值的文章主要介绍了Java的final修饰符。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

final 实例域

可以将实例域定义为 final。对于 final 域来说,构建对象时必须初始化 final 实例域,构造对象之后就不允许改变 final 实例域的值了。也就是说,必须确保在每一个构造器执行之后,final 实例域的值被设置,并且在后面的操作中,不能够再对 final 实例域进行修改。

例如,可以将 Employee 类中的 name 域声明为 final,因为在对象构建之后,这个值不会再被修改,即没有 setName() 方法。

class Employee {
	private final String name;
    ...
}

final 修饰符大都应用于基本(primitive)类型域,或不可变(immutable)类的域(如果类中的每个方法都不会改变其对象,这种类就是不可变的类。例如,String 类就是一个不可变的类)。

对于可变的类,使用 final 修饰符可能会对读者造成混乱。例如,private final StringBuilder evaluations; 在 Employee 构造器中会初始化为 evaluations = new StringBuilder(); final 关键字只是表示 evaluations 对象变量不会再指向其他的 StringBuilder 对象。不过这个 StringBuilder 对象可以更改。

public void giveGoldStar() {
	evaluations.append(LocalDate.now() + ": Gold star!\n");
}

final 类和方法

阻止继承:final 类和方法。

有时候,可能希望阻止人们利用某个类定义子类。不允许扩展的类被称为 final 类。如果在定义类的时候使用了 final 修饰符就表明这个类是 final 类。如果将一个类声明为 final,其中的所有方法自动地成为 final,而不包括数据域(final 类的数据域不会自动地成为 final 域)。

例如,假设希望阻止人们定义 Executive 类的子类,就可以在定义 Executive 这个类的时候,使用 final 修饰符声明。声明格式如下所示:

public final class Executive extends Manager {}

类中的特定方法也可以被声明为 final。如果这样做,子类就不能覆盖这个方法例如:

public class Employee {
   public final String getName() {
       return name;
   } 
}

将方法或类声明为 final 主要目的是:确保它们不会在子类中改变语义。例如:

  • Calendar 类中的 getTime() 和 setTime() 方法都声明为 final。这表明 Calendar 类的设计者负责实现 Date 类与日历状态之间的转换,而不允许子类处理这些问题。
  • 同样地,String 类也是 final 类,这意味着不允许任何人定义 String 的子类。换言之,如果有一个 String 的引用,它引用的一定是一个 String 对象,而不可能是其他类的对象。

有些程序员认为:除非有足够的理由使用多态性,应该将所有的方法都声明为 final。事实上,在 C++ 和 C# 中,如果没有特别地说明,所有的方法都不具有多态性。这两种做法可能都有些偏激。我们提倡在设计类层次时,仔细地思考应该将哪些方法和类声明为 final。

参考资料

《Java核心技术卷一:基础知识》(第10版)第 4 章:对象与类 4.3.9 final 实例域

《Java核心技术卷一:基础知识》(第10版)第 5 章:继承 5.1.7 阻止继承:final 类和方法文章来源地址https://www.toymoban.com/news/detail-423685.html

到了这里,关于Java的final修饰符的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 对于程序员来说,搜索有多重要?

    2023年4月24日,周一晚上。 今天我用Bing(必应)很快就搜索到了我需要的关于MFC的某个内容, 而我在百度和CSDN搜了好几天都没搜到, 当然,我认为这不仅仅是搜索引擎的问题,也可能是我搜索时输入的不够准确。 所以,基于上述,我得出关于搜索的两个技巧: 1、要

    2024年02月01日
    浏览(60)
  • 业务连续性对于软件来说有哪些作用?

    随着信息技术的快速发展,软件已经成为了现代企业的核心基础设施之一。然而,由于各种原因,软件系统在使用过程中出现问题的可能性是存在的。因此,保证软件系统的业务连续性变得至关重要,那业务连续性对于软件来说有哪些作用?   首先,业务连续性可以确保软件

    2024年02月08日
    浏览(51)
  • 对于一个程序员来说,电脑的内存需要多大?

    1、 程序员电脑内存有多大内存够用足够了,纯写代码的编程对电脑要求不高,尤其对显卡几乎没有要求,一般编程可能开的任务窗口比较多,所以只要cpu和内存大点就可以了一般来说,处理器确实比显卡来得重要一些,因为我们的电脑中只配备了一块处理器,而处理器内置

    2024年02月09日
    浏览(58)
  • 海关数据有对于外贸企业来说有什么作用?要如何使用才会有效果

    海关数据作为传统四大客户开发途径之一,一直以来知道的外贸人都很多,用的也很多,那么为什么这么多外贸人喜欢用海关数据呢,海关数据有对于外贸企业来说有什么作用?要如何使用才会有效果,如何购买海关数据 1.快速找到适合自己的买家  海关提单是买卖双方的交

    2023年04月26日
    浏览(49)
  • 【区块链】走进web3的世界-对于前端来说,web2与web3的区别

    web3离不开几个概念,智能合约、区块链、前端交互     1、智能合约可以直接与区块链中的区块进行交互;     2、前端通过web3.js/ethers.js等npm库可以和智能合约进行交互; 说的直白点,web3与web2对于前端来说,只是对接的对象发生了变化,从后端API接口改为了智能合约。这

    2023年04月16日
    浏览(49)
  • 问题:【IntelliJ IDEA】解决idea自动声明变量加finall修饰符问题

    1 new String() 2 快捷方式生成变量 final修饰的 settings-----》Editor------》Code Style--------》java下的这两个选项不被勾选 final modifier 然后在生成变量的时候,再次跳出来 dexlare final 的时候,按下 Alt+F 步骤三:如果上一步没有生效,重启idea file-invalidate caches

    2024年02月12日
    浏览(53)
  • java面试题(21):private修饰的方法可以通过反射访问,那么private的意义是什么?

    1 反射简介 Java,在一个类中,为了不让外界访问到某些属性和方法,通常将其设置为private,用正常的方式(对象名.属性名,对象名.方法名)将无法访问此属性与方法,但有没有其他方法可以访问呢?答案是有的,这就是java反射带来的便利。利用反射访问类的私有属性及方

    2024年01月22日
    浏览(41)
  • MySQL8.0版本在CentOS系统安装&&修改MySQL的root密码和允许root远程登录(介绍但对于生产来说不安全,学习可用)

    注意:安装操作 需要root权限 安装 配置yum仓库(秘钥为GnuPG签名,2023为版本的秘钥(对我当前是最新的),后面可能会改变)  # 更新密钥 rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql- 2023 # 安装Mysql8.x版本 yum库, 其中的el7代表的应该是LInux7版本,可以参考阿里云的# MySQL :: 下载

    2024年04月14日
    浏览(54)
  • iNFTnews | 对体育行业和球迷来说,NFT可以带来什么?

    自2017年CryptoKitties发布以来,NFT的受欢迎程度得到大大提高,且该行业将在未来两年内增长超过8000亿美元。 如果说NFT最让人印象深刻的事,莫过于“无聊猿游艇俱乐部”和“P2E”项目,此外NFT还有哪些值得关注的地方呢? 事实上,体育界对NFT的关注一直随着它的发展持续跟

    2023年04月09日
    浏览(50)
  • 零基础小白来说,学习算法的学习路线可以分为以下几步

    对于零基础小白来说,学习算法的学习路线可以分为以下几步: 学习基础算法知识 在学习算法之前,需要先学习计算机基础知识,例如数据结构、算法复杂度、基本编程语法等。学习基础算法知识,可以通过教材、视频教程、线上课程等方式进行。 刷题练习 掌握了基础算法

    2024年02月06日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包