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,一经查实,立即删除!

相关文章

数据库日志的说明

清日志 如 dump transaction 数据库名 with no_log --清除日志backup log 数据库名 with no_log --截断事务日志dbcc shrinkdatabase(数据库名,10) --收缩的数据库,空出10%的空间来 先执行上面两句,这两句比较快…

.NET 6 预览版 7 Released

.NET 6 预览版 7 ReleasedRichard 2021 年 8 月 10 日我们很高兴发布 .NET 6 Preview 7。这是我们进入(两个)发布候选 (RC) 期之前的最后一次预览版本。在我们放慢发布速度之前,团队经常加班夜战来保证最后一组功能。在这个版本中&#xff0c…

孝顺孝顺,孝不如顺

摘自西西河:http://www.ccthere.com/article/3044112,作者:抱朴仙人 刚说到一把年纪还要被老爹教育,忽然发现河里颇有几位难友,呵呵。 话说这个孝道,一直是包括“赡养”和“陪伴”两个方面的,也…

一致性 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命令,以自宿主的方式在本地开发环境成功运行了服务调用的例子。但是,这种运行…

也谈cacti整合nagios(centos)

花了近一天的时间整合了cacti和nagios,cacti用来检测运行状态nagios主要用来预警。期间参考了很多网友的文章,在此感谢下!在这里记录一下配置过程,以备后忘。。说整合其实只是表面的,cacti和nagios还是以他们原来的方式…

cursor 的moveToFirst和moveToNext和moveToPrevious以及moveToLast

查询出来的cursor的初始位置是指向第一条记录的前一个位置的,cursor.moveToFirst()指向查询结果的第一个位置。一般通过判断cursor.moveToFirst()的值为true或false来确定查询结果是否为空。cursor.moveToNext()是用来做循环的,一…

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

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

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

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

SCCM 2007系列教程之三日志文件

Microsoft System Center Configuration Manager 2007 中的所有客户端和站点服务器组件都将过程信息记录在单个日志文件中。您可以使用客户端和站点服务器日志文件中的信息来帮助您诊断在 Configuration Manager 2007 层次结构中可能出现的问题。默认情况下,Configu…

Unix常用命令

第一章 目录及文件操作命令 1.1 ls [语法]: ls [-RadCxmlnogrtucpFbqisf1] [目录或文件......][说明]: ls 命令列出指定目录下的文件,缺省目录为当前目录 ./,缺省输出顺序为纵向按字符顺序排列。-R 递归地列出每个子目录的内容-…

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

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

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

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

JAVA中pin什么意思_java语言中的多态概述

多态:一个对象相应着不同类型多态在代码中的体现:父类或接口的引用指向其子类对象。多态的优点:提高了代码的扩展性,前期定义的代码能够使用后期的内容。多态的弊端:前期定义的内容不能使用后期子类中定义的特有内容。…

过滤非法字符

在最近的项目中自己写了一段处理过滤非法字符的函数 原理: 1:首先判断页面的提交方式只有在post的情况下才进行过滤非法字符 2:将所以form表单中的数据保存到…

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

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

耳机没有声音

一 硬件二 驱动三 服务四 设置设置问题 1.应该是电脑里面的声道,扬声器 里面有声道设置。点击喇叭 ——打开音量控制——扬声器音量,,里面左右啊 什么的搞搞就好了 2.禁止前面板插入

C++入门【14-C++ 指向数组的指针】

您可以先跳过本章,等了解了 C 指针的概念之后,再来学习本章的内容。 如果您对 C 指针的概念有所了解,那么就可以开始本章的学习。数组名是指向数组中第一个元素的常量指针。因此,在下面的声明中: double runoobAarray…