0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Java中对 final 关键词的介绍

科技绿洲 来源:Java技术指北 作者:Java技术指北 2023-10-10 17:07 次阅读

1、修饰变量

稍微有点Java基础的都知道用final关键字修饰的变量称为常量,常量的意思是不可更改。变量为基本数据类型,不可更改很容易理解,那么对于引用类型呢?不可能改的是其引用地址,还是对象的内容?

我们首先构造一个实体类:Person

package com.ys.bean;

/**
 * Create by YSOcean
 */
public class Person {
    private  String name;

    public Person(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

接着根据创建一个 Person 对象:

图片
可以看到,首先通过 final 关键字修饰一个对象 p,然后接着将 p 对象指向另一个新的对象,发现报错,也就是说final修饰的引用类型是不能改变其引用地址的。

接着我们改动 p 对象的 name 属性:

图片
发现程序没有报错。

结论:被 final 修饰的变量不可更改其引用地址,但是可以更改其内部属性。

2、修饰方法

final 关键字修饰的方法不可被覆盖。

在《Java编程思想》第 4 版 7.8.2 章节 final 方法p176 页这样描述:使用 final 方法原因有两个:

①、第一个原因是把方法锁定,以防止任何继承类修改它的含义,这是出于设计的考虑:想要确保在继承中使方法的行为保持不变,并且不会被覆盖。

②、第二个原因是效率,在 Java 的早期实现中,如果将一个方法声明为 final,就是同意编译器将针对该方法的所有调用都转为内嵌调用,内嵌调用能够提高方法调用效率,但是如果方法很大,内嵌调用不会提高性能。而在目前的Java版本中(JDK1.5以后),虚拟机可以自动进行优化了,而不需要使用 final 方法。

所以final 关键字只有明确禁止覆盖方法时,才使用其修饰方法。

PS:《Java编程思想》中指出类中所有的 private 方法都隐式指定为 final 的,所以对于 private 方法,我们显式的声明 final 并没有什么效果。但是我们创建一个父类,并在父类中声明一个 private 方法,其子类中是能够重写其父类的private 方法的,这是为什么呢?

父类:Parent.class

package com.ys.bean;
/**
 * Create by YSOcean
 */
public class Parent {
    private void say(){
        System.out.println("parent");
    }
}

子类:Son.class

package com.ys.bean;
/**
 * Create by YSOcean
 */
public class Son extends Parent {

    private void say(){
        System.out.println("son");
    }

}

其实仔细看看,这种写法是方法的覆盖吗?我们通过多态的形式并不能调用到父类的 say() 方法:

图片
并且,如果我们在子类的 say() 方法中,添加 @Override 注解也是会报错的。

图片
所以这种形式并不算方法的覆盖。

3、修饰类

final 修饰类表示该类不可被继承。

也就是说不希望某个类有子类的时候,用final 关键字来修饰。并且由于是用 final 修饰的类,其类中所有的方法也被隐式的指为 final 方法。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • JAVA
    +关注

    关注

    19

    文章

    2966

    浏览量

    104702
  • 编译器
    +关注

    关注

    1

    文章

    1623

    浏览量

    49108
  • 数据类型
    +关注

    关注

    0

    文章

    236

    浏览量

    13618
  • final
    +关注

    关注

    0

    文章

    5

    浏览量

    2608
收藏 人收藏

    评论

    相关推荐

    [讨论]提高网站关键词排名的28个SEO小技巧

    ) 内容自然出现关键词 内容第一段和最后一段出现关键词 H1,H2标签中出现关键词 导出链接锚文本包含
    发表于 12-01 17:08

    TF-IDF测量文章的关键词相关性研究

    停用词的移除、大小写字母转化和词干提取。4)获取查询。获取单词权重,对于可疑文档利用TF-IDF获得关键词,并排序得到相应的关键词列表。排在前n个的关键词组成一个查询,以此类推,本试验
    发表于 01-26 10:38

    亚马逊代运营 amazon Search term 关键词填写的“神技”

    关键词稍作调整,以及筛选出的关键词在搜索结果的排名做出决定,是否应该放在 search term ;3.放一些与自己产品相关的长尾
    发表于 06-05 15:41

    HanLP关键词提取算法分析详解

    l 参考论文:《TextRank: Bringing Order into Texts》l TextRank算法提取关键词Java实现l TextRank算法自动摘要的Java实现这篇文章
    发表于 11-05 10:41

    关键词优化有哪些实用的方法

    的排名。还有一些实用的方法就是网站的一个关键词布局,这里应该设计seo算法的页面相关匹配程度,这样来提升网站页面的整体相关性,其次是重要的位置部署好我们要做的关键词,比如重要的一些标签来添加我们做
    发表于 08-11 01:19

    百度关键词排名掉完了怎么办

    一夜之间关键词排名掉完了,没有被K,也没有出现违规操作,这是怎么回事呢?
    发表于 01-27 11:01

    #2023,你的 FPGA 年度关键词是什么? #

    FPGA 年度关键词,我的想法是“标准化”;今年的工作遇到了不少同事的issues,本身都是小问题或者很细节的东西但是却反复出现问题,目前想到的最好的办法是做好设计规则的标准化才能避免,不知道大家有没有更好的建议?
    发表于 12-06 20:31

    2009年国照明行业十大关键词

    2009年国照明行业十大关键词   一、节能推广   关键词:节能推广   事
    发表于 12-15 10:24 630次阅读

    基于强度熵解决中文关键词识别

    文本的关键词识别是文本挖掘的基本问题之一。在研究现有基于复杂网络的关键词识别方法的基础上,从整个复杂网络拓扑结构特征的信息缺失角度来考察各节点的重要程度。提出强度熵测度来量化评估各节点重要程度,用于解决中文
    发表于 11-24 09:54 7次下载
    基于强度熵解决中文<b class='flag-5'>关键词</b>识别

    java final关键字用法技巧汇总解析

    谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字。另外,Java
    发表于 12-01 11:02 1121次阅读
    <b class='flag-5'>java</b> <b class='flag-5'>final</b><b class='flag-5'>关键</b>字用法技巧汇总解析

    基于关键词的最优路径查询算法

    为改进基于关键词的最优路径查询算法,在大规模图以及多查询关键词下复杂度过高与可扩展性不足的缺陷,依据查询关键词序列构建候选路径的策略提出一种高效查询算法。该算法在路径构建过程优先满足
    发表于 12-06 11:28 0次下载

    基于词频统计的关键词提取方法

    ,通过词语逆频率TF-IWF算法,按权值排序得到关键词。这种改进算法解决了传统中文关键词提取方法对相似度高的的不重视而导致关键词提取精度
    发表于 12-15 15:29 13次下载
    基于词频统计的<b class='flag-5'>关键词</b>提取方法

    基于自动关键词抽取方法

    自动关键词抽取是从文本或文本集合自动抽取主题性或重要性的或短语,是文本检索、文本摘要等许多文本挖掘任务的基础性和必要性的工作.探讨了关键词和自动
    发表于 12-26 16:47 2次下载
    基于自动<b class='flag-5'>关键词</b>抽取方法

    融合BERT向量与TextRank的关键词抽取方法

    Textrank转移概率矩阵计算过程,同时通过迭代运算对文档的词语进行综合影响力得分排序,最终提取得分最高的TopN个词语作为关键词。实验结果表明,当选取Top3、Top5、Top7和Topl0个关键词时,与基于
    发表于 03-21 09:55 18次下载
    融合BERT<b class='flag-5'>词</b>向量与TextRank的<b class='flag-5'>关键词</b>抽取方法

    Java对static关键词介绍

    static 是Java的一个关键字,可以用来修饰成员变量、修饰成员方法、构造静态代码块、实现静态导包以及实现静态内部类,下面我们来分别介绍。 1、修饰成员变量 用 static 修饰成员变量
    的头像 发表于 10-11 15:26 476次阅读
    <b class='flag-5'>Java</b><b class='flag-5'>中</b>对static<b class='flag-5'>关键词</b>的<b class='flag-5'>介绍</b>