当前位置: 首页 > news >正文

java final关键字 详解

  • 概述:

  • 作用:

  • 细节:

  • 演示:

  • 总结:


一、概述 :

final [ˈ faɪnl],最终的,最后的,决定性的,不可改变的。final作为Java中的一个关键字可以用来修饰方法,和变量。(但final不能修饰构造器!)

二、作用 :

①修饰类——
被final修饰的类不能被继承,但该类可以去继承别的 (没有被final修饰的 )类,例如String类和System类,它们被final修饰,是不可以被继承的,但是它们有自己的父类——即顶层父类Object类。还有一点需要注意:被final修饰的类虽然不能被继承,但可以被实例化,即我们可以创建该类对象
②修饰方法——
被final修饰的方法不能被子类重写,但可以被子类继承并使用(在满足访问权限规则的前提下)。注意,修饰方法时,final关键字不能与abstract关键字共存;因为我们前面在讲抽象类时说过,abstract修饰的方法是必须被非抽象子类重写的。
③修饰变量——
这里修饰的”变量“其实又可以细分为成员变量和局部变量被final修饰的变量称为最终变量,即常量——成员常量和局部常量常量只能赋值一次,不能被二次更改
关于常量的命名,我们在Java 命名规范中已经说过,常量名所有字母都大写,多个单词之间用下划线隔开。eg : MAX_VALUE(最大值)。
若final关键字修饰的是一个引用类型变量,则该引用指向的地址值无法改变。(相当于一个固定指针)PS : 但是,我们不建议使用final修饰引用类型数据,因为通过引用,仍然可以修改堆空间中真正的对象的内部数据,实际意义并不大。

三、细节 :

1.关于成员常量和局部常量的初始化问题 :

当final修饰的是成员变量,即final修饰属性时。该成员常量必须进行初始化。要么就在定义成员常量时对它赋初值来初始化;如果在定义成员常量时没有赋初值——那么要么在构造器中进行初始化;要么在代码块中进行初始化。

而对于final修饰的局部变量,即局部常量——局部常量如果未被使用,可以不赋初值;但如果局部常量被调用了,就必须赋初值。

2.关于“画蛇添足,冠上加冠”:

一般地,如果一个类已经被final关键字修饰,那么该类中的方法是没有必要再次用final修饰的。这是因为用final修饰方法的目的就是为了不让该方法被子类重写;而final修饰的类本身就已经不能被继承了,又谈何重写呢?

3.关于常见的final类:

除了上文中提到的String类和System类,java中所有的包装类都被final关键字修饰了。也就是说,所有的包装类都不能被继承

包装类包括了Byte, Short, Integer, Long, Character, Float, Double, Boolean共八种,其实就是java中八种基本类型对应的引用类型。(关于包装类,我们在讲到下一章内容时会专门出一篇博文,这里大家先了解一下即可。)

4.关于静态常量和公有静态常量:

静态常量指的是static和final共同修饰的变量。因为用到了static关键字的知识,所以相关内容up放在了static关键字的万字详解篇,大家可以看完这篇博文后再返回来,点击链接跳转进去查看,里面有目录,直接找到"公有静态常量"和"公有静态常量的演示"即可。

四、演示 :

1.演示Ⅰ——final修饰类的演示

up以Fruit类和Grape类为栗,当我们用final修饰Fruit类时,Fruit类将无法被Grape类继承。如下GIF演示动图 :


2.演示Ⅱ——final修饰方法的演示

up仍然以Fruit类和Grape类为栗,增加Test类作为测试类。在Furit中定义一个juice(榨果汁)方法,并且在子类Grape中重写该方法。

Fruit类,Grape类,Test类代码如下 :

package knowledge.polymorphism.about_final.demonstration;public class Fruit {private String fruit_name;public String getFruit_name() {return fruit_name;}public void setFruit_name(String fruit_name) {this.fruit_name = fruit_name;}public void juice() {System.out.println(getFruit_name() + "可以榨果汁儿!");}
}
class Grape extends Fruit {@Overridepublic void juice() {System.out.println(getFruit_name() + "可以榨葡萄汁儿!");}
}
class Test {public static void main(String[] args) {Fruit fruit = new Grape();fruit.setFruit_name("葡萄🍇");fruit.juice();}
}

运行结果 :

接着,我们为juice方法添加修饰符final修饰符,这时子类将不能重写juice方法,否则IDEA会报错。如下GIF演示动图 :


3.演示Ⅱ——final修饰变量的演示

up以Fruit类为演示类,以Test类作为测试类。在Furit类中分别定义四个变量name, color, size, sweetness,后三个变量使用final修饰(即后三个均是成员常量),并分别演示成员常量初始化的三种方式。

Fruit类,Test类代码如下 :

package knowledge.polymorphism.about_final.demonstration;public class Fruit {//这是变量,可以二次更改值。private String name = null;//通过setName方法可以修改name变量的值。public void setName(String name) {this.name = name;}public String getName() {return name;}//这是常量,一旦赋值后,不可进行二次更改。//成员常量第一种初始化方式————在定义时就直接赋值:final String color = "水果的颜色是五颜六色";//成员常量第二种初始化方式————在非静态代码块中赋值:final String size;{    //非静态代码块size = "水果的尺寸是能大能小";}//成员常量第三种初始化方式————在构造器中赋值final double sweetness;public Fruit() {sweetness = 9.0;}public void part() {final String haha;haha = "哈哈哈哈哈哈哈哈~";System.out.println("局部常量如果被调用就必须初始化," + haha);}
}class Test {public static void main(String[] args) {Fruit fruit = new Fruit();System.out.println("fruit's color = " + fruit.color);System.out.println("fruit's size = " + fruit.size);System.out.println("fruit's sweetness = " + fruit.sweetness);System.out.println("-------------------------------------");fruit.part();}
}

运行结果 :

五、总结 :

final是Java中定义常量的标志。大家一定要把final关键字的作用和细节仔细琢磨琢磨,自己动手练练,去做up出的课后习题。有疑问大家可以共同交流,感谢阅读!

System.out.println("END---------------------------------------------------------");

相关文章:

java final关键字 详解

概述:作用:细节:演示:总结:一、概述 : final [ˈ faɪnl],最终的,最后的,决定性的,不可改变的。final作为Java中的一个关键字可以用来修饰类,方法&#xff0c…...

Vbs_To_Exe制作简易exe程序

文章目录一、准备vbs脚本文件二、工具打包exe一、准备vbs脚本文件 新建一个文本文档 复制下面代码到文本文档中 Set speech CreateObject("SAPI.SpVoice") speech.Speak "l love you!"修改文本后缀为.vbs。编码选择ANSI(解决中文乱码问题&am…...

AI制药 - TMScore(US-align)、RMSD、Sequence 源码

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/129125467 参考文档:Nature Methods | 蛋白、RNA、DNA及其复合物结构的比对算法US-align 官网地址:https://zhanggroup.org/US-align/ TMScore TMScore,…...

关于个人的经历

简介 我是一个意外接触微机技术的五年专生(前三年寄读一个中专,后两年回大专学校),2020年中考失利,以高中线上30分去了现在所在五年专,专业是软件,目前个人已过程序员,网管,信息处理员&#xff…...

设计在单链表中删除值相同的多余结点的算法(包括指针的引用的知识点)

1 C中指针与引用的区别 引用相当于起别名int m; int &n m;n 相当于 m 的别名(绰号),对 n 的任何操作就是对m的操作。 所以 n 既不是m的拷贝,也不是指向 m 的指针,其实n就是 m 它自己。 引用的注意事项&#xff…...

100份简历才找一个合适的,2023,软件测试岗位饱和了吗?

各大互联网公司的接连裁员,政策限制的行业接连消失,让今年的求职雪上加霜,想躺平却没有资本,还有人说软件测试岗位饱和了,对此很多求职者深信不疑,因为投出去的简历回复的越来越少了。 另一面企业招人真的…...

(三十七)vue 项目中常用的2个Ajax库

文章目录axios实现vue-resource实现上一篇:(三十六)Vue解决Ajax跨域问题 先看一个github搜索案例 有一个搜索框,输入相关用户名,就能模糊搜索出用户,展现到下方 第一步:我们用到了第三方样式库…...

Python打包调试问题解决

使用pyinstaller打包,发现问题:代码运行时调试的结果不一致代码中设定的图标打包后没有显示出来打包代码程序test.py为入口函数main()所在的文件pyinstaller -F -w -i test.ico test.py 不会出现控制台,图标为test.ic…...

计算机SCI期刊自引率一般是多少? - 易智编译EaseEditing

论文常用来指进行各个学术领域的研究和描述学术研究成果的文章,是探讨问题进行学术研究的一种手段,又是描述学术研究成果进行学术交流的一种工具,包括学年论文、毕业论文、学位论文、科技论文、成果论文等。 一般来说,论文的自引…...

力扣(LeetCode)417. 太平洋大西洋水流问题(2023.02.19)

有一个 m n 的矩形岛屿,与 太平洋 和 大西洋 相邻。 “太平洋” 处于大陆的左边界和上边界,而 “大西洋” 处于大陆的右边界和下边界。 这个岛被分割成一个由若干方形单元格组成的网格。给定一个 m x n 的整数矩阵 heights , heights[r][c]…...

Python解题 - CSDN周赛第30期 - 天然气订单

本期比赛的在线测试系统好像出了点问题,导致很多选手最后提交的分数是0,而问哥也遇到好几次提交后一直显示“运行中”而没有结果的情况。鉴于之前遇到过类似情况,不停地刷新页面才得以继续。但是此问题已经存在并持续了好几期,极大…...

移动WEB开发一、基础知识

零、文章目录 文章地址 个人博客-CSDN地址:https://blog.csdn.net/liyou123456789个人博客-GiteePages:https://bluecusliyou.gitee.io/techlearn 代码仓库地址 Gitee:https://gitee.com/bluecusliyou/TechLearnGithub:https:…...

07 二叉树

开始系统学习算法啦!为后面力扣和 蓝桥杯的刷题做准备!这个专栏将记录自己学习算法是的笔记,包括 概念, 算法运行过程,以及 代码实现,希望能给大家带来帮助,感兴趣的小伙伴欢迎评论区留言或者私…...

3|物联网控制|计算机控制-刘川来胡乃平版|第4章:过程通道与人机接口-4.1数字量输入输出通道接口|课堂笔记|ppt

...

从 ClickHouse 到 Apache Doris,腾讯音乐内容库数据平台架构演进实践

导读:腾讯音乐内容库数据平台旨在为应用层提供库存盘点、分群画像、指标分析、标签圈选等内容分析服务,高效为业务赋能。目前,内容库数据平台的数据架构已经从 1.0 演进到了 4.0 ,经历了分析引擎从 ClickHouse 到 Apache Doris 的…...

linux线程的基本知识

这里用的是Linux的pthread线程库,需要加pthread线程库。 线程的创建 第一个参数是线程id的地址。第二个参数是线程属性,一般为NULL。第三个是要执行的函数。第四个是函数的参数,一般也为NULL 线程的等待,第一个参数是线程的id,第…...

docker swarm 集群服务编排部署指南(docker stack)

Docker Swarm 集群管理 概述 Docker Swarm 是 Docker 的集群管理工具。它将 Docker 主机池转变为单个虚拟 Docker 主机,使得容器可以组成跨主机的子网网络。Docker Swarm 提供了标准的 Docker API,所有任何已经与 Docker 守护程序通信的工具都可以使用…...

ESP开发环境搭建

一、windows中搭建 esp-idf tool(可选),下载连接如下:https://dl.espressif.com/dl/esp-idf/?idf4.4 下载安装tools后进入vscode进行插件安装(未离线下载idf工具也可以通过第二步通过插件下载安装) 1. vscode安装编译环境 ESP-IDF 需要安装一些必备工…...

内网安全——ssH协议WindowsLinux密码获取hashcat

目录 (一)横向移动-Linux把场-ssH协议&RSA密匙凭证 (二)Windows-密码获取-在线离线读取&密文破解&a...

【编程入门】应用市场(安卓版)

背景 前面已输出多个系列: 《十余种编程语言做个计算器》 《十余种编程语言写2048小游戏》 《17种编程语言10种排序算法》 《十余种编程语言写博客系统》 《十余种编程语言写云笔记》 《N种编程语言做个记事本》 目标 为编程初学者打造入门学习项目,使…...

【图像分类】卷积神经网络之LeNet5网络模型结构详解

写在前面: 首先感谢兄弟们的关注和订阅,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌。 1. 前言 LeNet5算法是LeCun在1998年提出的卷积神经网络模型。大约90年代,由于支持向量机等算法的发现,深度学习…...

2023-JavaWeb最新整理面试题-TCP、Tomcat、Servlet、JSP等

Java基础面试题 一、JavaWeb专题 1.HTTP响应码有哪些 1、1xx(临时响应) 2、2xx(成功) 3、3xx(重定向):表示要完成请求需要进一步操作 4、4xx(错误):表示请…...

【云原生kubernetes】k8s Ingress使用详解

一、什么是Ingress 在上一篇关于k8s之service的使用一篇中提到,Service对集群之外暴露服务的主要方式有两种,NotePort和LoadBalancer,但这两种方式,都有一定的缺点,具体来说: NodePort 会占用很多集群机器…...

[数据结构]:顺序表(C语言实现)

目录 前言 顺序表实现 01-开发环境 02-文件布局 03-代码 01-主函数 02-头文件 03-SeqListCommon.cpp 04-SeqListPositionOperation.cpp 05-SeqListValueOperation.cpp 结语 前言 此专栏包含408考研数据结构全部内容,除其中使用到C引用外,全为…...

【大厂高频必刷真题100题】《有序矩阵中第 K 小的元素》 真题练习第27题 持续更新~

有序矩阵中第 K 小的元素 给你一个 n x n 矩阵 matrix ,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。 请注意,它是 排序后 的第 k 小元素,而不是第 k 个 不同 的元素。 你必须找到一个内存复杂度优于 O(n^2) 的解决方案。 示例 1: 输入:matrix = [[1,5,9…...

两年外包生涯做完,感觉自己废了一半....

先说一下自己的情况。大专生,17年通过校招进入湖南某软件公司,干了接近2年的点点点,今年年上旬,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了五年的功能测试…...

02- OpenCV绘制图形及图像算术变换 (OpenCV基础) (机器视觉)

知识重点 OpenCV用的最多的色彩空间是HSV. 方便OpenCV做图像处理img2 img.view() # 浅拷贝img3 img.copy() # 深拷贝split(mat) 分割图像的通道: b, g, r cv2.split(img) # b, g, r 都是数组merge((ch1, ch2, ch3)) 融合多个通道cvtColor(img, colorspace): 颜…...

猜数字大小 II

力扣链接 力扣 题目描述: 我们正在玩一个猜数游戏,游戏规则如下: 我从 1 到 n 之间选择一个数字。你来猜我选了哪个数字。如果你猜到正确的数字,就会 赢得游戏 。如果你猜错了,那么我会告诉你,我选的数…...

CCNP350-401学习笔记(251-300题)

251、 Which IPv6 OSPF network type is applied to interface Fa0/0 of R2 by default? A. multipointB. broadcast C. Ethernet D. point-to-point 252、Which EIGRP feature allows the use of leak maps? A. neighborB. Stub C. offset-list D. address-family 253、W…...

掌握MySQL分库分表(二)Mysql数据库垂直分库分表、水平分库分表

文章目录垂直分表拆分方法举例垂直分库水平分表水平分库小结垂直角度(表结构不一样)水平角度(表结构一样)垂直分表 需求:商品表字段太多,每个字段访问频次不⼀样,浪费了IO资源,需要…...

做网站政府扶持/南京seo培训

内容来源:2017年5月20日,腾讯高级软件工程师吴友强在“中生代技术沙龙系列之互联网大数据”进行《腾讯云大数据实战》演讲分享。IT 大咖说作为独家视频合作方,经主办方和讲者审阅授权发布。阅读字数:1954 | 3分钟阅读嘉宾演讲视频…...

用Java做知乎网站/考研培训机构排名前五的机构

安装完成后,创建J2ME项目时显示信息如下: Not all requested modules can be enabled: [StandardModule:org.netbeans.modules.mobility.kit jarFile:C:\Program Files\NetBeans 7.1.1\mobility\modules\org-netbeans-modules-mobility-kit.jar]...

推广网站的几种方法/网站关键词优化的价格

Linux 大作业局域网聊天室项目组成员列表课序号学号姓名班级任务分工组员02201192网1103客户端代码,详细设计02201192软1113引言需求分析概要设计,界面代码02201192软1113服务器,客户端代码,总结02201192软1113文档参与大连理工大…...

响应式网站和传统网站/如何做好网络宣传工作

1.空格 <view> <text space"ensp">你好 啊 哈哈哈&#xff08;空格是中文字符一半大小&#xff09;</text> </view><view> <text space"emsp">你好 啊 哈哈哈&#xff08;空格是中文字符大小&#xff09;</text>…...

中企动力网站建设方案/系统优化app最新版

存储字符集 utf8 和 utf8mb4 utf8 是 Mysql 中的一种字符集&#xff0c;只支持最长三个字节的 UTF-8 字符&#xff0c;也就是 Unicode 中的基本多文本平面。 要在 Mysql 中保存 4 字节长度的 UTF-8 字符&#xff0c;需要使用 utf8mb4 字符集&#xff0c;但只有 5.5.3 版本以后…...

mc做地图画网站/百度竞价优化排名

我们可以把Block当做Objective-C的匿名函数。Block允许开发者在两个对象之间将任意的语句当做数据进行传递&#xff0c;往往这要比引用定义在别处的函数直观。另外&#xff0c;block的实现具有封闭性(closure)&#xff0c;而又能够很容易获取上下文的相关状态信息。Block的创建…...