再学Java基础——final关键字

在Java中,final关键字是一个修饰符,它可以应用于类、方法、变量和常量。以下是final关键字在Java中的不同用途及其作用:

  1. final类

    • 当一个类被声明为final时,它不能被继承。这意味着没有其他类可以扩展这个类。
    • 作用:这提供了类的封装和安全性,确保类的行为不会被其他类改变。
  2. final方法

    • 当一个方法被声明为final时,它不能在子类中被重写(override)。
    • 作用:这确保了方法的实现是固定的,并且不会被子类更改。这对于那些不需要子类重写的方法很有用,如工具类中的方法。
  3. final变量

    • 当一个变量被声明为final时,它的值只能被赋值一次。一旦赋值,就不能再改变。
    • 对于基本数据类型,final确保变量的值在初始化后不会被改变。
    • 对于引用类型(如对象、数组等),final确保引用本身不会被改变,但引用的对象的内容可以被修改(除非对象本身是不可变的)。
    • 作用:这提供了变量的不可变性,这对于创建常量很有用。例如,在Java中,所有的常量都应该使用final关键字进行声明。
  4. final常量

    • 当一个变量被声明为final并立即初始化时,它通常被称为常量。例如:final int MAX_VALUE = 100;
    • 作用:常量提供了一种在程序中表示固定值的方式,这些值在程序运行期间不会改变。

我们来看一个final常量的例子:

public class Constants {  // 这是一个final常量,表示圆周率的近似值  public static final double PI = 3.141592653589793;  // 由于是static final,并且被赋予了一个原始数据类型值,所以这也被称为静态常量或编译时常量  // 常量通常用于表示那些在程序运行期间不会改变的值  // 注意:由于PI是一个public的常量,通常按照Java的命名规范,它应该全部大写  // 另一个例子,表示一个整型的常量  public static final int MAX_VALUE = 100;  // 注意:final变量也可以在构造函数中初始化,但这样它们就不是编译时常量了  // 它们被称为实例常量(instance constants)或后期绑定常量(late-bound constants)  // 构造函数中不能对final实例变量赋值(除非它们是在声明时就被赋值的)  // 但在初始化块或构造方法中,可以对那些没有在声明时初始化的final实例变量进行赋值  private final int instanceConstant;  public Constants() {  // 这里可以对instanceConstant进行赋值,但只能赋值一次  instanceConstant = 42; // 假设42在这个上下文中有一个特殊的含义  }  // 其他方法...  
}  // 使用Constants类中的常量  
public class Main {  public static void main(String[] args) {  System.out.println("PI: " + Constants.PI);  System.out.println("MAX_VALUE: " + Constants.MAX_VALUE);  // 由于instanceConstant是实例常量,你需要通过实例来访问它  // 但在这个例子中,我们没有为instanceConstant提供访问器方法,所以它只能在Constants类内部被访问  }  
}

在这个例子中,Constants类定义了两个final常量:一个是PI,表示圆周率的近似值;另一个是MAX_VALUE,表示一个整型的最大值。这些常量在类的整个生命周期中都是不变的,并且在整个程序中都可以被访问(因为它们是publicstatic的)。同时,还定义了一个final实例变量instanceConstant,它在构造函数中被初始化,并且只能在Constants类内部被访问(除非提供了访问器方法)。

总的来说,final关键字在Java中提供了一种机制来确保类的不可继承性、方法的不可重写性、变量的不可变性以及常量的存在。这些特性有助于增强代码的安全性、可读性和可维护性。

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

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

相关文章

【莫比乌斯变换-02】关于莫比乌斯变换属性梳理

文章目录 一、说明二、多视角看莫比乌斯变换2.1 从几何角度2.2 复分析中的莫比乌斯变换2.3 莫比乌斯变换运算组合2.4 莫比乌斯变换的不动点2.5 三个点决定一个莫比乌斯变换2.6 交叉比2.7 莫比乌斯变换的逆变换 三 莫比乌斯变换性质证明3.1 证明1:莫比乌斯变换将圆变…

【莫比乌斯变换-03】python实现圆对圆的变换

文章目录 一、说明二、python实现复平面的莫比乌斯变换三、线的变换四、画笑脸 一、说明 我们在前面的文章中,叙述了莫比乌斯变换的复数分析,以及种种几何属性,本篇中叙述如何程序地实现:复平面上的圆在莫比乌斯变换下的图像是另…

基于高德 API 的自动获取气候数据的 Python 脚本

文章目录 高德申请 Key脚本介绍运行结果示例 源代码: https://github.com/ma0513207162/PyPrecip。pyprecip\reading\read_api.py 路径下。 项目介绍:PyPrecip 是一个专注于气候数据处理的 Python 库,旨在为用户提供方便、高效的气候数据处理…

linux基本操作

vim的基本操作 正常模式:启动vim后默认处于正常模式。不论位于什么模式,按下Esc建都会进入正常模式。 插入模式:在正常模式中按下i,l,a,A等键,会进入插入模式。现在只用记住按i键会进行插入模…

文本内容如何扫码展示?文本转二维码常用技巧

随着网络的不断发展,现在很多人会通过二维码的方式来作为内容的载体,用来给其他人提供需要的信息或者其他内容。其中,将文本制作二维码就是很常用的一种方式,通过扫码展示文字内容,比如信件、物品信息、联系方式等类型…

python学习笔记----函数进阶(七)

一、函数多个返回值 def test_return():x 1y "hello"z Truereturn x, y, za, b, c test_return()print(a) print(b) print(c)二、函数多种传参方式 2.1 函数参数种类 根据使用方式上的不同,函数有4种常见参数的使用方式: 位置参数关键…

EPAI手绘建模APP资源管理和模型编辑器2

g) 矩形 图 26模型编辑器-矩形 i. 修改矩形的中心位置。 ii. 修改矩形的长度和宽度。 h) 正多边形 图 27模型编辑器-内接正多边形 图 28模型编辑器-外切正多边形 i. 修改正多边形的中心位置。 ii. 修改正多边形中心距离端点的长度。 iii. 修改正多边形的阶数。阶数为3&…

Linux Multipath极简安装配置

1.安装软件 #yum install -y device-mapper* 2.开启并设置开机启动 #systemctl start multipathd && systemctl enable multipathd 3.连接存储 在存储上对主机进行卷映射 4.修改配置文件 注:此配置文件可能存在,也可能不存在&#xff0c…

禅道项目管理系统身份认证绕过漏洞复现(QVD-2024-15263)

0x01 产品简介 禅道项目管理软件是国产的开源项目管理软件,专注研发项目管理,内置需求管理、任务管理、bug管理、缺陷管理、用例管理、计划发布等功能,完整覆盖了研发项目管理的核心流程。 0x02 漏洞概述 2024年4月,互联网披露禅道系统存在身份认证绕过的漏洞情报。经分…

【Unity 协程】

Unity中的协程(Coroutine)是一种编程结构,它允许你以一种看似同步的方式编写可能需要异步执行的代码。协程特别适用于需要在一定时间后执行操作,或者在循环执行某段代码直到某个条件满足时的场景。 协程使用IEnumerator委托来实现…

Qt中的对象树

一. QT对象树的概念 QObject 的构造函数中会传入一个 Parent 父对象指针,children() 函数返回 QObjectList。即每一个 QObject 对象有且仅有一个父对象,但可以有很多个子对象。 那么Qt这样设计的好处是什么呢?很简单,就是为了方…

基于HAL库的stm32中定时器的使用--定时器中断每隔一秒进行led灯的闪烁以及定时器生成PWM

一:什么是定时器 (1)stm32定时器,是存在于stm32单片机中的一个外设。stm32共有八个定时器,两个高级定时器(TIM1、TIM8),四个通用定时器(TIM2、TIM3、TIM4、TIM5&#xff…

docker 指定根目录 迁移根目录

docker 指定根目录 迁移根目录 1、问题描述2、问题分析3、解决方法3.1、启动docker程序前就手动指定docker根目录为一个大的分区(支持动态扩容),事前就根本上解决根目录空间不够问题3.1.0、方法思路3.1.1、docker官网安装文档3.1.2、下载docker安装包3.1.3、安装doc…

贪吃蛇(下)游戏的实现

感谢大佬的光临各位,希望和大家一起进步,望得到你的三连,互三支持,一起进步 个人主页:LaNzikinh-CSDN博客 文章目录 前言一.蛇和食物的打印二.游戏的运行逻辑三.结束游戏 (善后工作)四.游戏的测…

找出两个数的最小公倍数和最大公约数

1 问题 已知两个数,用代码写出程序,求两个数的最小公倍数和最大公约数? 2 方法 利用Python自定义函数解决 代码清单 1 #Made by Txd,Hsy,Lyhdef calculation(x,y):#自定义一个函数 common_multiplemin(x,y)#找出两个数最小的那个数 for i in rang…

【数据结构和算法】--RangeSet时间范围管理示例

目录 一、问题二、RangeSet实现原理2.1、RangeSet常用方法2.2、核心原理2.3、核心特性2.4、基本使用 三、具体应用 一、问题 最近项目要求对一批时间范围进行管理,要求不能交叉。RangeSet是专门用于高效处理范围集合。 二、RangeSet实现原理 RangeSet表示一组不重…

C语言中字符串输入的3种方式

Ⅰ gets() 函数 gets() 函数的功能是从输入缓冲区中读取一个字符串存储到字符指针变量 str 所指向的内存空间 # include <stdio.h> int main(void) {char a[256] {0};gets(a);printf("%s",a);return 0; }Ⅱ getchar() # include <stdio.h> int mai…

工业光源环形系列一AOI光源特点

产品特点 ◆具有环形光源所有的特点&#xff1b; ◆采用不同角度多色光&#xff0c;使被照物体的成像更具立体特征&#xff1b; ◆每种颜色可独立控制。

MySQL为什么默认引擎是InnoDB?

因为InnoDB特别强大,其支持很多东西 1.支持事务: 意味着对于一个复杂的SQL语句要么全部执行成功,要么全部失败,因为其底层是原子性的 2.支持并发(行级并发) 意味着面对高并发,多个用户可以同时访问一个表的不同行,不同行之间上锁,而不是给一个表上锁,这样就提高了高并发的性能和…

在Linux中mknod命令有什么用

2024年5月5日&#xff0c;周日下午 mknod命令用于在Linux系统中创建设备节点文件。设备节点文件是Linux系统中与硬件设备通信的一种特殊文件类型。mknod命令允许用户手动创建这些设备节点文件&#xff0c;以便与系统中的硬件设备进行交互。 具体来说&#xff0c;mknod命令的语法…