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

    文章

    2904

    浏览量

    103003
  • 编译器
    +关注

    关注

    1

    文章

    1577

    浏览量

    48632
  • 数据类型
    +关注

    关注

    0

    文章

    228

    浏览量

    13504
  • final
    +关注

    关注

    0

    文章

    5

    浏览量

    2581
收藏 人收藏

    评论

    相关推荐

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

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

    请问DSP里如何确定ioport关键词定义的地址对应的引脚?

    请问DSP里如何确定ioport关键词定义的地址对应的引脚?
    发表于 06-28 15:48

    ☑网站建设 ☑网站推广 ☑关键词优化 ☑百度地标 ☑欢迎...

    ☑网站建设 ☑网站推广 ☑关键词优化 ☑百度地标 ☑欢迎咨询QQ:2991704102
    发表于 03-15 16:13

    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

    基于Cortex-M处理器的高精度关键词识别实现

    我们可以对神经网络架构进行优化,使之适配微控制器的内存和计算限制范围,并且不会影响精度。我们将在本文中解释和探讨深度可分离卷积神经网络在 Cortex-M 处理器上实现关键词识别的潜力。关键词识别
    发表于 07-23 06:59

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

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

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

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

    如何在Cortex-M处理器上实现高精度关键词的识别

    如何在 Cortex-M 处理器上实现高精度关键词识别
    发表于 02-05 07:14

    请问quartus有类似于vivado * ALLOW_COMBINATORIAL_LOOPS = "true"的关键词吗?

    我想在在verilog文件引入环,但是总是被quartus的综合优化掉,请问quartus有类似于vivado * ALLOW_COMBINATORIAL_LOOPS = "true"的关键词吗?
    发表于 01-07 11:10

    example/speech_recognition/asr样例写了一个关键词识别程序,关键词识别后播放提升音失败的原因?

    仿造example/speech_recognition/asr样例写了一个关键词识别程序,识别到关键词后,就播放提示音。目前关键词可以正确识别,就是播放提示音的时候就报错,报错信息如下,请各位帮忙
    发表于 03-10 06:18

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

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

    final关键字的用法

    Java中,final关键字可以用来修饰类、方法和变量(包括成员变量和局部变量)。下面就从这三个方面来了解一下final关键字的基本用法。
    发表于 09-27 10:36 0次下载
    <b class='flag-5'>final</b><b class='flag-5'>关键</b>字的用法

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

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