Java(十八)——final修饰符

Java—面向对象的三大基本特征(封装、继承、多态)、抽象类、接口、fianl关键字、权限、内部类 文章目录 阅读详情

final关键字可用于修饰类、变量和方法,用于表示它修饰的类、方法和变量不可改变。

final修饰变量时,表示该变量一旦获得了初始值就不可被改变,final既可以修饰成员变量(包括类变量和实例变量),也可以修饰局部变量、形参。由于final变量获得初始值之后就不能被重新赋值,因此final修饰成员变量和修饰局部变量有一定的不同。

一、final成员变量

final修饰类变量、实例变量能指定初始值的地方如下。

  • 类变量:必须在静态初始化块中指定初始值或声明该类变量时指定初始值,而且只能在两个地方的其中之一指定。
  • 实例变量:必须在非静态初始化块、声明该实例变量或构造器中指定初始值,而且只能在三个地方的其中之一指定。

Java语法规定:final修饰的成员变量必须由程序员显式地指定初始值。

二、final局部变量

系统不会对局部变量进行初始化,局部变量必须由程序员显式初始化。因此使用final修饰局部变量时,既可以在定义时指定默认值,也可以后面代码中对该final变量赋初始值。

三、final修饰基本类型变量和引用类型变量的区别

当使用final修饰基本类型变量时,不能对基本类型变量重新赋值,因此基本类型变量不能被改变。但对于引用类型变量而言,它保存的仅仅是一个引用,final只保证这个引用类型变量所引用的地址不会改变,即一直引用同一个对象,但这个对象完全可以发生改变。

四、可执行“宏替换”的final变量

对一个final变量来说,不管它是类变量、实例变量,还是局部变量,只要满足三个条件,这个final变量就不再是一个变量,而是相当于一个直接量。

  • 使用final修饰符修饰。
  • 在定义该final变量时指定了初始值。
  • 该初始值可以在编译时就被确定下来。

final修饰符的一个重要用途就是定义“宏变量”。满足上面三个条件,那么这个final变量本质上就是一个“宏变量”,编译器会把程序中所有用到该变量的地方直接替换成该变量的值。

五、final方法

final修饰的方法不可被重写。例如Java提供的Object类里就有一个final方法:getClass()。

六、final类

final修饰的类不可以有子类,例如java.lang.Math类就是一个final类,不可以有子类。

七、不可变类

不可变(immutable)类的意思是创建该类的实例后,该实例的实例变量是不可改变的。Java提供的8个包装类和java.lang.String类都是不可变类。

如果需要创建自定义的不可变类,可遵守如下规则:

  • 使用private和final修饰符来修饰该类的成员变量。
  • 提供带参数的构造器,用于根据传入参数来初始化类里的成员变量。
  • 仅为该类的成员变量提供getter方法,不提供setter方法,因为普通方法无法修改final修饰的成员变量。
  • 如果有必要,重写Object类的hasCode()和equals()方法。equals()方法根据关键成员变量来作为两个对象是否相等的标准,除此之外,还应该保证两个用equals()方法判断为相等的对象的hashCode()也相等

如果需要设计一个不可变类,尤其要注意其引用类型的成员变量,如果引用类型的成员变量的类是可变的,就必须采取必要的措施来保护该成员变量所引用的对象不会被修改,这样才能创建真正的不可变类。

八、缓存实例的不可变类

不可变类的实例状态不可改变,可以很方便地被多个对象所共享。如果程序经常需要使用相同的不可变实例,则应该考虑缓存这种不可变类的实例。毕竟重复创建相同对象没有太大的意义,而且加大系统开销。如果可能,应该将已经创建的不可变类的实例进行缓存。

【Java练习题】Java 程序的输出 | 第十八套(重写) 💂 个人网站: 海拥 —— 一个乐于分享技术与快乐的博主 🤟 版权: 本文由【海拥】原创、在优快云首发、需要转载请联系博主 💬 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦 💅 想寻找共同摸鱼的小伙伴,请点击【摸鱼小游戏】 难度级别: 简单 程序 程序一 1) 以下程序的输出是什么? class Derived { protected final void getDetails() { System.out.println("Derived class"); } } .. 阅读详情

相关推荐

第十五届蓝桥杯省赛C/C++B组H题【拔河】题解(AC)

由于枚举三个点肯定会超时,所以只能枚举两个点,我们尝试枚举第一个区间。的复杂度,需要找出右区间中和左区间的和最相近的值,可以考虑使用。一开始,我们将所有可能的右区间的区间和,都插入。做法同上,用前缀和优化数组求和的过程。的数组和差值最小是多少,其中。递增进行枚举左区间,当。的数组,求两个子数组。为左端点的区间的和。

一只大采集~ 5283

JAVA中的修饰符是什么意思_java中的修饰符

java中的修饰符主要分为两种访问修饰符和非访问修饰符,下面就是具体的介绍啦,balalallala一、访问修饰符1.default:无修饰符,可以使用的范围(对象,类,接口,变量,方法)2.private:在同一类内可见,使用范围对象,变量,方法(不能修饰类)类和接口不可被声明为private,只能被所属类访问,类中公共的gette,setterr方法被外部类访问idea中创建getter的快捷...

weixin_30324103的博客 1475

智慧矿山无人机空地一体化解决方案

未来,随着技术的不断进步和应用场景的不断拓展,智慧矿山无人机空地一体化解决方案将在矿业领域发挥更加重要的作用,为矿山的可持续发展提供更加有力的保障。该系统能够实现矿山的全方位、全天候监测与管理,提升矿山生产效率,降低安全风险,并为矿山的可持续发展提供有力支持。智慧矿山无人机空地一体化解决方案是当前矿业领域技术创新的重要方向,旨在通过集成无人机技术、物联网、大数据、人工智能等先进技术,实现矿山的智能化、高效化和安全化运营。在矿山爆破、挖掘等危险作业中,无人机可进行远程监控和指挥,降低人员安全风险。

专注多旋翼、复合翼无人机技术研究,从事低空经济行业。 1109

final变量

final成员变量final修饰的成员变量必须由程序员显示地指定初始值。对于final修饰的 成员变量而言,一旦有了初始值,就不能被重新赋值,如果既没有在定义成员变量时指定初始值,也没有在初始化块、构造器中为成员变量指定初始值,那么这些成员变量的值将一直是系统默认的初始值,没有意义。final修饰变量规则如下。类变量:必须在静态初始化块中指定初始值或声明该变量时指定初始值,而且只能在两个地方的其中之

衣带渐宽终不悔,为伊消得人憔悴。 359

YOLOv5_DeepSORT_Pytorch训练自己的多目标跟踪模型

1 准备 环境配置:https://blog.youkuaiyun.com/weixin_50008473/article/details/115250986?spm=1001.2014.3001.5501 YOLOv5_DeepSORT_Pytorch代码地址: https://github.com/mikel-brostrom/Yolov5_DeepSort_Pytorch DeepSORT论文:https://arxiv.org/pdf/1703.07402.pdf 2 训练目标检测模型 训练自己的目标检测模

weixin_50008473的博客 1万+

java final 修饰变量_Java笔记:final修饰符

本篇笔记主要是final修饰符修饰类、成员变量、方法的用法,不可变类,实例缓存的不可变类final关键字可以用来修饰类、变量、方法。final变量不能重新赋值,子类不能覆盖父类的final方法,final类不能有子类。1.final修饰的成员变量(1)final修饰的成员变量一旦赋值后,不能被重新赋值。(2)final修饰的实例Field,要么在定义该Field的时候指定初始值,要么在普通初始化块...

weixin_32419609的博客 619

系统架构最佳实践 -- 统一身份认证系统

设计和实现一个高效、安全的统一身份认证系统需要考虑到系统架构设计、用户认证与授权、用户身份管理、安全性保障、日志记录与审计、高可用性与容错性,以及用户体验优化等多个方面。通过合理的架构设计、安全措施和用户体验优化,可以构建一个满足用户需求、提供安全可靠的身份认证服务的系统。本文将总结统一身份认证系统的架构设计与实践经验,帮助读者了解如何设计和实现一个高效、安全的统一身份认证系统。统一身份认证系统应支持详细的日志记录和审计功能。通过合理的身份认证策略和授权机制,可以确保用户身份的准确性和信息的安全性。

xiaoli8748的专栏 1705

黑马程序员全套Java教程_Java基础教程_修饰符(十八)

黑马程序员全套Java教程_Java基础教程_修饰符(十八)1、包2、导包2.1 导包的概述和使用3、修饰符3.1 修饰符的分类3.2 权限修饰符3.3 状态修饰符 1、包 包其实就是文件夹,其作用是对类进行分类管理 包的定义格式: (1)格式:package 包名;(多级包用“.”分开) (2)范例:package.com.itheima; 指定了包的java文件如何运行?(手动建包) 如下,我们在文件夹中新建一个HelloWorld.java,通过控制台javac编译后,java命令执行可以正常

qq_44009317的博客 940

桌面实施远程光电体积描记法:使用面部视频测量心率的C++详细指南

在现代医疗和健康监测领域,心率是一个非常重要的生理参数,它可以为我们提供关于身体健康状况的重要信息。但是,随着技术的进步,现在我们有了一种新的方法,称为远程光电体积描记法(rPPG),它可以无需与皮肤接触就测量心率。然后,我们从面部颜色的信号序列中提取绿色通道的值,因为绿色通道对于心率的变化最为敏感。在上述代码中,我们使用了OpenCV库,它是一个开源的计算机视觉库,非常适合这种应用。这种变化是由于血液流动引起的,当心脏跳动时,血液流经面部,导致肤色的轻微变化。要实现rPPG,首先需要检测并跟踪人脸。

qq_38334677的博客 608

一网打尽身份验证与授权:深入剖析ASP.NET Core Identity在C#中的全方位实战应用

ASP.NET Core Identity 是 Microsoft 提供的一个强大且可扩展的身份验证和授权框架,用于构建基于用户账户、角色和权限的Web应用程序。它提供了用户注册、登录、密码管理、多因素认证、角色分配、授权等功能,与ASP.NET Core框架深度集成,简化了安全相关的开发工作。通过上述代码示例和注释,展示了如何安装配置Identity、自定义用户实体与数据库上下文、实现用户注册登录、管理角色与用户角色关系,以及如何使用授权策略保护应用程序资源。,并指定用户和角色类型以及主键类型。

java专栏 1528

java基础系列十八(final、finally、finalize区别)

目录 一、final关键字的功能概述 1、用来修饰一个引用 2.用来修饰一个方法 3.用来修饰类 一、final关键字的功能概述 final关键字可以用来修饰引用、方法和类。 1、用来修饰一个引用 如果引用为基本数据类型,则该引用为常量,该值无法修改; 如果引用为引用数据类型,比如对象、数组,则该对象、数组本身可以修改,但指向该对象或数组的地址的引用不能修改。 如果引用时类的成员变量,则必须当场赋值,否则编译会报错。 例子如下所示: fina...

三殿下的博客 196

【定位模块项目实战】正态分布变换(NDT)定位及建图(依赖高精度点云地图和三维激光雷达的定位方案)

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、正态分布变换(NDT)定位解决的主要问题二、正态分布变换(NDT)定位的核心思想三、NDT算法流程1.多元正态分布概念2.网格化并计算正态分布参数3.变换参数和最大似然四、使用C++实现NDT配准参考资料 前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对依赖高精度地图和激光雷达的定位技术–正态分布变换(NDT)定位做个简单的介绍,具体

qq_35635374的博客 4411

Java选择题(二十八)

1.下列叙述错误的是( ) 正确答案: C 你的答案: C (正确) A.java程序的输入输出功能是通过流来实现的 B.java中的流按照处理单位可分成两种:字节流和字符流 C.InputStream是一个基本的输出流类。 D.通过调用相应的close()方法关闭输入输出流 解释: InputStream是一个基本的字节输入流 2.java中,用( )关键字定义常量? 正确答案: A 你的答案: A (正确) A.final B.#define C.float D.const 解释: fin

Ctra_aaa的博客 1036

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Java必须知道的概念

Java中有哪些访问修饰符?访问修饰符是用来控制类、变量、方法的访问权限的关键字。Java中有四种访问修饰符:public、private、protected和默认(不使用任何关键字)。

weixin_69190490的博客 1266

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Java基础(十):关键字static、代码块、关键字final

对比静态变量与实例变量。

从基础到源码解析的学习记录 1076

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Java Review (零、初识)

2020年在匆匆忙忙慌慌乱乱中就这么度过了,我们迎来了新一年,互联网的发展如此之快,技术日新月异,更新迭代成为了这个时代的代名词,坚持下来的技术体系会越来越健壮,JVM作为如今是跳槽大厂必备的技能,如果你还没掌握,更别提之后更新的新技术了。更多JVM面试整理:《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!大厂必备的技能,如果你还没掌握,更别提之后更新的新技术了。[外链图片转存中…(img-P3DPYrAS-1711625192795)]

2401_83817122的博客 679

第一,谈谈final, finally, finalize的区别。

第一,谈谈final, finally, finalize的区别。最常被问到。第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?第三,Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统)。第四,&和&&的区别。

xyybbb的专栏 1416

Java基础

这是我自己整理的java基础面试题,初次整理,仅供参考面向对象编程就是以建立模型体现出来的抽象思维过程和面向对象的方法 利用类 方法继承封装多态等概念进行程序设计以上的这些内容仅仅知识java基础中的一部分,仅供参考,如果有问题,请私信我。

weixin_43980294的博客 43

java 接口继承抽象类_第二十八节:Java基础-进阶继承,抽象类,接口

标题图前言Java基础-进阶继承,抽象类,接口进阶继承class Stu {int age = 1;}class Stuo extends Stu {int agee = 2;}class Demo{Stuo stuo = new Stuo();}成员变量的特殊情况成员函数class Stu{void show(){System.out.println("Stu show");}}class St...

weixin_33278498的博客 156

IT十八掌掌第五天课程总结

今天学完IT十八掌第五天java基础课程:学习内容:1,jvm栈空间设置 堆空间设置: java -Xmx<size> java -Xms<size> 栈空间设置: java -Xss<size> 死循环不会导致栈溢出,因为在不断的压栈,弹栈 方法不断迭代会导致栈溢出,不断的在压栈(方法帧)2,...

weixin_33695082的博客 114

第十八天:方法重写与多态

需要有继承关系,子类重写父类的方法。

zuohanyu的博客 94

小芳同学的错题总结(十八)

1.题目: 11. public interface Status { 12. /* insert code here */ int MY_VALUE = 10; 13.} 哪几个在第12行有效? (多选.) A final B static C native D public 答案:ABD 这考的是接口中属性的知识点,类型是public static final,且访问权限只能是public 意味着是个常量所以必须初始化且不能再更改了,结合下面图理解以下。 public int...

qq_50074343的博客 702

八股文--->JAVA基础

一:JVM,JDK,JRE的关系 (1)JVM(Java Virtual Machine)是JAVA虚拟机,JAVA程序需要在虚拟机上运行,不同的平台有自己的虚拟机,因此JAVA实现跨平台 (2)JDE(Java Runtime Environment)是JAVA运行环境,包含JVM和JAVA核心类库(如基本数据类型、基本数学函数、字符串处理、线程、异常处理类等),想要运行好JAVA程序,只需要一个JRE即可 (3)JDK(Java Development Kit)是提供给开发人员使用的,包含了JRE

weixin_47188125的博客 1963

Java 基础

先执行顶级父类的构造器,在逐级向下执行构造器可以用: A.x = 0 super.x = 1class Outer02 {//外部类private void m2() {//私有方法public void m1() {//方法//1.局部内部类是定义在外部类的局部位置,通常在方法//3.不能添加访问修饰符,但是可以使用final 修饰//4.作用域︰仅仅在定义它的方法或代码块中final class Inner02 {//局部内部类〔本质仍然是一个类)

一+一加1的博客 155
上一篇: Java(十七)——static关键字与单例类
下一篇: Java(十九)——对象与垃圾回收
Undergoer_TW
博客等级 码龄11年 185粉丝 103原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值