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

final关键字:我偏不让你继承

哈喽,小伙伴们大家好,我是兔哥呀,今天就让我们继续这个JavaSE成神之路!

这一节啊,咱们要学习的内容是Java所有final关键字。

之前呢,我们学习了继承,这大大提高了代码的灵活性和复用性。但是总有一些时候,我们的类不希望被子类继承,成员属性不希望被子类修改,成员方法不希望被子类重写,那该怎么办呢?

final关键字相当于“最终”或“不可更改”,在生活中,比如学校期末考试的成绩是“最终”的,不可再更改。

同样在java程序中,final关键字也表示最终,用于修饰变量、方法和类,其含义是指不可更改,即所修饰的类不可以被继承,修饰的方法不可以被重写,修饰的变量为常量,值不可以改变。

1.final 修饰类

final 修饰类代表这个class不允许被继承。

注意,class左边的访问修饰符(比如public)和final的位置可以互换。不过,我们一般习惯于讲final写在public后面。

比较典型的,就是String类,它就是final的。

public final class Stringimplements java.io.Serializable, Comparable<String>, CharSequence {}

为什么呢?

  1. 保证String类的安全性,防止被其他类继承,重写String类的方法,破坏String类的语义,导致程序出错。

  2. String类是一个特殊的类,它的内部实现了字符串的指针,可以优化字符串的操作效率,如果被其他类继承,就可能导致内部实现的细节被破坏,影响性能。

总结下来就是,String类用的很频繁,而且已经写的够牛逼了,你就别瞎改啦。

2.final 修饰成员方法

final 修饰成员方法,就是在返回值左边加上final关键字,这样一来这个方法就不能再被子类重写,但是在访问权限足够的情况下依然能够被访问和调用,也可以被子类继承使用。

3.final 修饰方法内的局部变量

public final void sayHello(){final String name = "keke";System.out.println("Hello, I am a "+name+"!");
}

final可以修饰方法内的局部变量,被修饰的变量不能再被修改。

PS:final 修饰方法内的局部变量,你必须在这个变量被使用前进行初始化!

其实吧,不仅是final的变量,任何局部变量你不初始化都不能用啊。。。

String aa;
System.out.println(aa); //报错

4.final 修饰成员变量

final修饰成员方法,该成员方法就不能被子类重写,但是仍然可以被子类继承并可以通过子类对象调用该方法。

final修饰成员变量,该成员变量必须在创建对象之前进行赋值,否则编译失败。

如图所示,你不能声明一个final变量却不给他赋值。给final变量赋值你有两种方式,一个是在构造方法中赋值,另一个是在定义的时候就赋值。

从深层次讲,就是你必须得在这个类的对象出现之前就给final变量赋值,因此你不能在set方法中给他赋值,因为你必须先new对象出来才能调用set方法啊。

5.final修饰的局部变量能改属性吗

就是说,在一个方法里,我定义一个局部的引用类型变量,而且还设置了final,那么我们可以修改它的属性值吗?

public static void main(String[] args) {final Student s = new Student();s.setMoney(200000);System.out.println(s.getMoney());
}

答案是当然可以,final修饰的变量,你不能给他重新赋值,但是没说不能修改其属性啊。

这样就不行咯!

所以,final修饰了这个变量,他的地址就被定死了,不能改了。

顺便说一下,构造方法是不能修饰构造方法的。

6. 课后作业

1、下列关于final关键字的描述,正确的是( )

A. final关键字可用来修饰方法

B. final关键字可用来修饰类

C. 声明为final的方法不能被重写

D. final修饰的方法可以被private修饰符修饰

相关文章:

final关键字:我偏不让你继承

哈喽&#xff0c;小伙伴们大家好&#xff0c;我是兔哥呀&#xff0c;今天就让我们继续这个JavaSE成神之路&#xff01; 这一节啊&#xff0c;咱们要学习的内容是Java所有final关键字。 之前呢&#xff0c;我们学习了继承&#xff0c;这大大提高了代码的灵活性和复用性。但是总…...

8大主流编程语言的适用领域,你可能选错了语言

很多人学编程经常是脑子一热然后就去网上一搜资源就开始学习了&#xff0c;但学到了后面发现目前所学的东西并不是自己最喜欢的&#xff0c;好像自己更喜欢另一个技术&#xff0c;感觉自己学错了&#xff0c;于是乎又去学习别的东西。 结果竹篮打水一场空&#xff0c;前面所付…...

关于Python库的问题

关于Python库的问题 问题1&#xff1a; ModuleNotFoundError: No module named ‘requests’ Python库 Pycharm使用Requests库时报错&#xff1a; No module named requests’解决方法 未安装requests库&#xff0c;使用"pip install requests"命令安装 依然提示P…...

好记性不如烂笔头(2)

概述&#xff1a;用来记录一些小技巧。 1.查看MyBatis执行的sql 类&#xff1a;org.apache.ibatis.mapping.MappedStatement方法&#xff1a;getBoundSql(Object parameterObject)在IDEA的Evaluate Expression查看sql&#xff1a;boundSql.getSql() 2.maven仓库地址为https&…...

Java for循环嵌套for循环,你需要懂的代码性能优化技巧

前言 本篇分析的技巧点其实是比较常见的&#xff0c;但是最近的几次的代码评审还是发现有不少兄弟没注意到。 所以还是想拿出来说下。 正文 是个什么场景呢&#xff1f; 就是 for循环 里面还有 for循环&#xff0c; 然后做一些数据匹配、处理 这种场景。 我们结合实例代码来…...

关于我拒绝了腾讯测试开发岗offer这件事

2022年刚开始有了向要跳槽的想法&#xff0c;之前的公司不能算大厂但在重庆也算是数一数二。开始跳槽的的时候我其实挺犹豫的 其实说是有跳槽的想法在2022年过年的时候就有了&#xff0c;因为每年公司3月会有涨薪的机会&#xff0c;所以想着看看那能不能涨&#xff08;其实还是…...

从GPT到GPT-3:自然语言处理领域的prompt方法

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️&#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…...

Git代码提交规范

Git 代码规范Git 每次提交代码&#xff0c;都是需要写 Commit message&#xff08;提交说明&#xff09;&#xff0c;否则就不允许提交。Commit message 的格式 (三部分)&#xff1a;Heaher ----- 必填type ---必需scope --- 可选subject --- 必需Body ---- 可省略Footer ---- …...

【JavaScript速成之路】JavaScript内置对象--Math和Date对象

&#x1f4c3;个人主页&#xff1a;「小杨」的csdn博客 &#x1f525;系列专栏&#xff1a;【JavaScript速成之路】 &#x1f433;希望大家多多支持&#x1f970;一起进步呀&#xff01; 文章目录前言1&#xff0c;Math对象1.1&#xff0c;常用属性方法1.1.1&#xff0c;获取x的…...

(自用POC)Fortinet-CVE-2022-40684

本文转载于&#xff1a;https://mp.weixin.qq.com/s?__bizMzIzNDU5Mzk2OQ&mid2247485332&idx1&sn85931aa474f1ae2c23a66bf6486eec63&chksme8f54c4adf82c55c44bc7b1ea919d44d377e35a18c74f83a15e6e20ec6c7bc65965dbc70130d&mpshare1&scene23&srcid…...

ConvNeXt V2实战:使用ConvNeXt V2实现图像分类任务(二)

文章目录训练部分导入项目使用的库设置随机因子设置全局参数图像预处理与增强读取数据设置Loss设置模型设置优化器和学习率调整算法设置混合精度&#xff0c;DP多卡&#xff0c;EMA定义训练和验证函数训练函数验证函数调用训练和验证方法运行以及结果查看测试热力图可视化展示完…...

【人工智能与深度学习】基于正则化潜在可变能量的模型

【人工智能与深度学习】基于正则化潜在可变能量的模型 正则化潜变量能量基础模型稀疏编码FISTALISTA稀疏编码示例卷积稀疏编码自然图像上的卷积稀疏编码可变自动编码器正则化潜变量能量基础模型 具有潜在变量的模型能够生成预测分布 y ‾ \overline{y}...

【Leetcode——排序的循环链表】

&#x1f60a;&#x1f60a;&#x1f60a; 文章目录一、力扣题之排序循环链表二、解题思路1. 使用双指针法2、找出最大节点&#xff0c;最大节点的下一个节点是最小节点&#xff0c;由此展开讨论总结一、力扣题之排序循环链表 题目如下&#xff1a;航班直达&#xff01;&#…...

ChatGPT研究分享:机器第一次开始理解人类世界目录

0、为什么会对ChatGPT感兴趣一开始&#xff0c;我对ChatGPT是没什么关注的&#xff0c;无非就是有更大的数据集&#xff0c;完成了更大规模的计算&#xff0c;所以能够回答更多的问题。但后来了解到几个案例&#xff0c;开始觉得这个事情并不简单。我先分别列举出来&#xff0c…...

【linux】Linux基本指令(上)

前言&#xff1a; 在之前我们已经简单了介绍了一下【Linux】&#xff0c;包括它的概念&#xff0c;由来啊等进行了讲解&#xff0c;接下来我们就将正式的踏入对其的学习&#xff01;&#xff01;&#xff01; 本文目录&#x1f449;操作系统的概念1.命令的语法1.1命令介绍1.2选…...

程序员必会技能—— 使用日志

目录 1、为什么要使用日志 2、自定义日志打印 2.1、在程序中得到日志对象 2.2、使用日志对象打印日志 2.3、日志格式 3、日志的级别 3.1、日志级别的分类 3.2、日志级别的设置 4、持久化日志 5、更简单的日志输出——lombok 5.1、如何在已经创建好的SpringBoot项目中添加…...

生成项目的包依赖文件requirements.txt

目录生成项目的包依赖文件requirements.txtrequirements.txt文件怎么来&#xff1f;使用pipreqs第三方库requirements.txt文件使用requirements.txt生成项目的包依赖文件requirements.txt 在安装部署代码时或者使用别人的项目时&#xff0c;会需要安装项目的依赖包&#xff0c…...

安卓渐变的背景框实现

安卓渐变的背景框实现1.背景实现方法1.利用PorterDuffXfermode进行图层的混合&#xff0c;这是最推荐的方法&#xff0c;也是最有效的。2.利用canvas裁剪实现&#xff0c;这个方法有个缺陷&#xff0c;就是圆角会出现毛边&#xff0c;也就是锯齿。3.利用layer绘制边框1.背景 万…...

【拳打蓝桥杯】算法前置课——时间复杂度与空间复杂度

文章目录前言为什么需要复杂度分析&#xff1f;大O复杂度表示法时间复杂度分析几种常见时间复杂度实例分析空间复杂度分析内容小结最后说一句&#x1f431;‍&#x1f409;作者简介&#xff1a;大家好&#xff0c;我是黑洞晓威&#xff0c;一名大二学生&#xff0c;希望和大家一…...

vite中动态引入图片,打包之后找不到图片地址?

一般来说项目中我们集中存放图片&#xff0c;然后希望在页面中直接引入&#xff01; 更好的就是直接在模板中调用一个函数 然后传入图片的名字就可以显示出来 事实上确实可以办到&#xff0c;我们用到了一个 new URL import.meta.url这俩个东西 再src目录下 static 下创建一…...

3个关键场景解析:如何使用iperf3 Windows版精准诊断网络性能问题

3个关键场景解析&#xff1a;如何使用iperf3 Windows版精准诊断网络性能问题 【免费下载链接】iperf3-win-builds iperf3 binaries for Windows. Benchmark your network limits. 项目地址: https://gitcode.com/gh_mirrors/ip/iperf3-win-builds 在当今数字化时代&…...

AI 文档工作流里,那道正在被悄然割裂的“思想透明度”

在 AI 辅助的知识库构建、产品规格编写或 Agent 提示工程里&#xff0c;一份长文档从草稿到最终交付的过程&#xff0c;正面临一场隐形断裂。创作者先在纯文本里苦苦打磨思路&#xff0c;AI 却直接吐出一份排版精美、图文并茂的 HTML——看起来分享效率拉满&#xff0c;实际却把…...

大模型入门必看:收藏这份工业大模型学习指南,小白也能轻松入门

本文介绍了工业大模型的概念、体系架构和构建方法&#xff0c;分析了工业大模型在制造业中的应用潜力。文章指出&#xff0c;工业大模型并非通用大模型在工业领域的简单应用&#xff0c;而是一套全新的理论与技术体系。工业大模型通过融合工业数据和机理知识&#xff0c;具备智…...

从标注到部署:用LabelImg和MaixHub,在K210上跑通你的第一个“汽车识别”模型全流程

从零构建汽车识别模型&#xff1a;LabelImg标注与K210部署实战指南 在智能硬件开发领域&#xff0c;K210芯片以其高效的AI推理能力成为边缘计算的热门选择。本文将带您完整走通一个汽车识别项目的全流程——从数据标注到模型部署。不同于市面上泛泛而谈的教程&#xff0c;我们聚…...

别再纠结了!KVM虚拟化实战:RAW和QCOW2磁盘格式到底怎么选?附qemu-img保姆级操作指南

KVM虚拟化存储选型实战&#xff1a;RAW与QCOW2的深度抉择与效能调优 当你的KVM虚拟机开始频繁弹出"存储空间不足"的警告&#xff0c;或是需要为关键业务系统建立可靠的快照机制时&#xff0c;面对RAW和QCOW2这两种主流磁盘格式&#xff0c;技术决策就变得尤为关键。这…...

如何快速部署Apache Traffic Server:10分钟上手完整教程

如何快速部署Apache Traffic Server&#xff1a;10分钟上手完整教程 【免费下载链接】trafficserver Apache Traffic Server™ is a fast, scalable and extensible HTTP/1.1 and HTTP/2 compliant caching proxy server. 项目地址: https://gitcode.com/gh_mirrors/traf/tra…...

从STM32到华大HC32F460:USB HOST MSC + FatFs R0.13c移植避坑全记录

从STM32到华大HC32F460&#xff1a;USB HOST MSC FatFs R0.13c移植实战指南 作为一名长期使用STM32的嵌入式开发者&#xff0c;第一次接触华大半导体的HC32F460系列MCU时&#xff0c;既兴奋又忐忑。兴奋的是国产MCU的性能已经能够媲美国际大厂&#xff0c;忐忑的是生态差异带来…...

别再死记硬背了!用Pointer Network搞定NLP里的OOV难题(附代码实战)

Pointer Network实战&#xff1a;如何优雅解决NLP中的OOV难题 在电商客服机器人开发中&#xff0c;你是否遇到过这样的尴尬场景&#xff1a;当用户询问"冰墩墩什么时候补货"时&#xff0c;机器人却回复"该商品暂无库存"——它完全没理解"冰墩墩"…...

娱乐圈天降紫微星终结乱象,海棠山铁哥终结资源咖霸屏时代

资源咖的丧钟&#xff0c;已鸣。 草根王的号角&#xff0c;已响。一、旧秩序罪状书固化霸权三宗罪现场速写1. 资源垄断霸占赛道、包揽曝光、红利通吃2. 圈层护城出身即顶流&#xff0c;背景即通行证3. 劣币驱逐流水线泛滥&#xff0c;原创被碾压&#xff0c;审美被带偏 “无资源…...

面试题:模型评价指标全解析——准确率、精确率、召回率、F1、ROC、AUC、MAE、MSE、RMSE、R² 一文讲透

把“分类指标怎么看、回归指标怎么选、ROC/AUC 怎么判断模型好坏”一次讲清楚很多人在面试里被问到“模型评价指标有哪些”时&#xff0c;第一反应往往是背一串名词&#xff1a;准确率、精确率、召回率、F1、AUC、MAE、MSE、R。看似都答到了&#xff0c;实际上却很容易被继续追…...