java final 修改_“无法改变的设计”——浅谈Java中的final关键字

2cbbc685144a3accb502647720eb083a.png

在Java中,final关键字可以用来修饰类、变量(包括成员变量和局部变量)、方法,下面从这三个方面分别说明。

final方法

当一个方法被final修饰时,表明这个方法不能被子类重写。

下面程序试图重写final方法,将会引发编译错误。

public class Dinosaur {

public final void test() {

}

}

public class Further extends Dinosaur {

// 下面代码会编译错误,不能重写final方法

public void test() {

}

}

特别的,类中的所有private方法都被隐式地指定为是final的。

final类

当一个类被final修饰时,表明该类不能被继承。若一个类试图继承一个final类时,将会编译错误。

// 定义一个Dinosaur类,并声明为final的

public final class Dinosaur {

//...

}

// 当Further试图继承Dinosaur,编译会不通过

public class Further extends Dinosaur {

}

由于final类不能被继承,所以final类中所有的方法都隐式地指定为final的。你也可以给这些final类中的方法加上fianl修饰符,不过这样做没有任何意义。

像我们常用的String类,就是被设计成final的,它不能有子类。

11281764.html

final变量

变量分为成员变量和局部变量,下面分别说明。

final成员变量

当一个成员变量被final修饰时,表明这个变量完成初始化(实例变量:要么在定义该实例变量时指定初始值,要么在普通初始化块或构造器中指定初始值;类变量:要么在定义该类变量时指定初始值,要么是在静态初始化块指定初始值)后,就不能被改变。

下面程序代码演示final修饰成员变量的效果。

public class FinalVariableTest {

// 定义成员变量时指定初始化值

private final int a = 6;

// 定义成员变量时未指定初始化值,将在构造器中进行初始化

private final String s;

public FinalVariableTest() {

// 初始化s的值,如果不初始化s的值,将会编译错误,final修饰的成员变量必须由程序显式地指定初 // 始化值

this.s = "程序员技术之瞳";

// ERROR,这里试图给a重新赋值,将会编译错误

a = 7;

}

}

final局部变量

如果final修饰的局部变量在声明时已经赋了初始值,则后面代码中不能再重新赋值。

public void test() {

// 这里定义一个final的局部变量,并赋了初始值1

final int a = 1;

// ERROR,试图重新赋值,则会编译错误

a = 2;

}

如果final修饰的局部变量在声明时未指定初始值,则后面代码中可以给该变量赋值,但只能赋值一次。

public void test() {

// 这里定义一个final的局部变量,但没有指定初始值

final int a;

// 给变量赋值为1

a = 1;

// ERROR,这里若试图给a重新赋值,则会编译错误

a = 2;

}

final修饰基本数据类型变量和引用类型变量的区别

当final修饰的是基本数据类型变量时,该变量一旦获得初始化值,其值将无法改变。

当final修饰的是引用数据类型变量时,由于该变量保存的是一个地址值,final保证的是该变量不会引用另外一个对象,但该对象的内容可以改变。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/299081.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一致性 hash 算法( consistent hashing )

consistent hashing 算法早在 1997 年就在论文 Consistent hashing and random trees 中被提出,目前在cache 系统中应用越来越广泛; 1 基本场景 比如你有 N 个 cache 服务器(后面简称 cache ),那么如何将一个对象 obje…

复工之后,如何让自己的时间更值钱

全世界只有3.14 % 的人关注了爆炸吧知识时间最不偏私给任何人都是二十四小时时间也最偏私给任何人都不是二十四小时而如何让自己的时间更值钱以下公众号或许能给你一些启示赶快扫码关注吧!RSS精选ID:KindleNewsRSS精选是一个专注于时间管理iOS相关及Kind…

selenium autoit java_Java+Selenium——AutoIt工具处理文件上传

关于文件上传,这边介绍一个第三方工具,叫AutoIt,简单来说,这个是一个能支持桌面GUI自动化的工具,它支持脚本语言编写。这里,我们用AutoIt来做文件上传的演示。在Selenium脚本中如果需要AutoIt来协助这个文件…

Blazor+Dapr+K8s微服务之开发环境调试

1 安装Dapr开发调试环境1.1 Dapr 完整安装模式不支持开发调试在上一篇随笔《BlazorDaprK8s微服务之服务调用》中,我们通过为每个微服务运行dapr run ….dotnet run命令,以自宿主的方式在本地开发环境成功运行了服务调用的例子。但是,这种运行…

这10个人,总是牛逼的无话可说

全世界只有3.14 % 的人关注了爆炸吧知识终于迎来知识君最喜欢的工作日了。热爱工作的知识君还是在认真地看书,码字。哈哈哈,有模友知道看得是什么书然而在拍完照片后,还是得想想今晚该写些啥东西。狄拉克 保罗狄拉克(Paul Adrien Maurice …

WebSocket服务器(物联网下行通知神器)

HttpServer是一个轻量级Web服务器,用于在嵌入式设备以及客户端环境中提供简单Web服务,同时也支持标准WebSocket服务。本文例程基于vs2022,基础例程可参考:https://www.yuque.com/smartstone/nx/httpserverWebSocket服务端WebSocke…

继续送假期干货——响应式图片工具smartImg

中午看《众妙之门》看到一个响应式图片处理工具(点此查看)的介绍,然后就心血来潮想着不妨自己写一个基于JQ的吧,于是就又有了这么一个干货给大家。 smartImg 的全部文件可以从我的Github上下载,其实它非常小巧&#xf…

一顿家庭火锅让本不富裕的家庭雪上加霜......

1 从此再也没有人相信你曾是个双眼皮▼2 在家吃火锅让一个本不富裕的家庭雪上加霜▼3 大型翻车现场▼4 各位大爷大伯,我先干了招待不周,还望海涵▼5 老外为了防止用手摸脸导致传染发明出来的新方法 ......但这东西难道不是宠物那啥用的吗&#xff1…

ASP.NET Core 修改开源协议为MIT,.NET全平台 MIT协议开源了

2021年7月23日,.NET开发团队完成了所有的.NET平台的相关框架的MIT协议更改,我们可以通过 https://github.com/dotnet/aspnetcore/issues/18873 看到详细的修改提交,这个协议修改里面主要有2点,具体可以看 https://github.com/dotn…

InstallSield更新包快速入门文档----感谢原作者ㄣ齊¨彡仯乄的无私提供

本文经原作者ㄣ齊彡仯乄特许授权于海洋女神发布,转载请务必注明出处与链接;原作者ㄣ齊彡仯乄和海洋女神保留对该文的一切法律许可下的权益;需要发布在盈利性报刊、网站等请与原作者ㄣ齊彡仯乄或海洋女神联系. 简述 本文主要描述安装程序更新包…

太赞了:中文版开源!这或许是最经典的计算机编程教材

全世界只有3.14 % 的人关注了爆炸吧知识转自 AI 科技大本营《Think Python》是很多计算机初学者的不二入门教材,受到广泛好评。该书原作者是美国 Olin 工程学院的教授 Allen B. Downey,目前该书的原版和中文版本都已免费开源。Allen 称,《Thi…

jBPM专家力作——《深入浅出jBPM》

恭喜本书荣登互动网和当当网畅销排行榜!媒体评论 “这是一本全面介绍jBPM的书,从基础知识到实战开发技巧,作者结合其实际项目开发经验,对国内流程的许多特色要求给出了浅显易懂的解决方案。对于想在项目中应用jBPM的初学者&#x…

WeihanLi.Npoi 1.20.0 Released

WeihanLi.Npoi 1.20.0 ReleasedIntroWeihanLi.Npoi 是一个基于 netstandard2.0 的一个 NPOI 扩展库,主要用于导入导出 Excel 以及CSV,支持通过 Fluent API 的方式来支持非常灵活的导入导出配置,详细使用可以参考文档介绍以及项目示例Updates最…

转:Chrome渲染分析之Timeline工具的使用

概述 这个工具真的很强大,Timeline工具栏提供了对于在装载你的Web应用的过程中,时间花费情况的概览,这些应用包括处理DOM事件, 页面布局渲染或者向屏幕绘制元素。Timeline可以通过事件,框架,和实时内存用量3个方面的数…

数学和物理太难?这些动图让你秒懂抽象概念

数学动图△ 从椭圆的一个焦点射出的光线总会通过另一个焦点。△ 真人版。△ 一图看懂正弦、余弦和正切什么意思。△ 圆的面积。△ 如何理解圆的面积和派的关系。△ 勾股定理演示。直角三角形的两条直角边的平方和(两个小正方形的面积),加起来…

java typereference_记录一下jackson中TypeReference的使用

今天在看到项目中有一段代码是将string字符串转化成对象,需要被转化成对象的类加了TypeReference,随即去百度了下。TypeReference是一个抽象类,继承了Comparable接口。里面的Type是一歌接口。贴上代码:mapper.readValue(station.g…

Docker小白到实战之容器数据卷,整理的明明白白

前言上一篇把常用命令演示了一遍,其中也提到容器的隔离性,默认情况下,容器内应用产生的数据都是由容器本身独有,如果容器被删除,对应的数据文件就会跟着消失。从隔离性的角度来看,数据就应该和容器共存亡&a…

U9在SQL Server上的性能优化经验(转述) — 之 行版本快照

此文根据用友的文档《基于SQL Server 2008构建SOA大型管理软件技术实践》“翻译”而成,非原创。在baidu上看见此文,觉得写的很好,就将原先的PPT细化一下并除去废话。 第二篇部分将的是行版本快照的隔离。 这是PPT上的图片: 图片上…

程序员崩溃的40个瞬间!!!

全世界只有3.14 % 的人关注了爆炸吧知识说到程序员,在外界眼里,他们是掌控代码的大神,他们是改变世界的王者。其实程序员的工作不容易,不信,就来看看程序员崩溃的各种瞬间——01公司实习生找bug02在调试时,…

java web请求字符串处理_java web工作常用技能篇(三)-封装复杂请求对象2

前言:在各类网站论坛上,没有找到与工作比较贴切的技能,所以特此写一些对刚步入工作或者工作中没有重视的技能与问题,各位大牛请及时关闭文章.ps1:文中所有标点都是英文的,看官请不要在意.为了便于平时敲代码,所以中文输入法也默认了英文标点(防止各类因为…