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

Java 中的关键字 final 和 static

一、关键字 final

final 修饰符可以用来修饰类、方法和变量,final 修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的。

1.1 final 变量

final 有"最后的、最终的"的含义,final 修饰的变量一旦被赋值后,就不能被重新赋值。此外,被 final 修饰的实例变量必须显式指定初始值(可以理解为,未初始化的值为常量的话没有意义)。修饰常量时,关键字 final 就和 C++ 中的 const 关键字的功能比较相似了。不过要注意的一点是,final 修饰的引用变量,其指向的对象的内容是可以被改变的。

import java.util.ArrayList;class Test {public static void main(String[] args) {final ArrayList<String> arrayList = new ArrayList<>();arrayList.add("1"); // 并不会报错,指向对象的内容可以改变arrayList.add("2");arrayList.forEach(a -> System.out.println(a));final int constant = 1;
//        constant = 2; // 这样写会报错:java: 无法为最终变量constant分配值}
}

1.2 final 方法

根据 final 的含义,我们可以这样理解,final 修饰的方法,是最后的方法,不可被重新定义(重写),但是可以被子类继承。final 修饰方法的主要目的是防止该方法的内容被修改,类似于 final 修饰变量后变成常量。

1.3 final 类

final 修饰的类无法被继承,也相当于无法被修改,同时,final 类中的所有成员方法都将隐式地被 final 修饰。Java 中最经典 final 修饰的类就是 String 了,它无法被任何类继承,不仅仅是为了保证 String 的不变性,同时在早期的 Java 版本中会将 final 修饰的方法转化为内嵌调用,提高程序性能(后来的 Java 会自动进行优化,不需要显式地用 final 修饰)。

二、关键字 static

static 修饰符可以用来修饰类方法和类变量。

2.1 静态变量

当 static 关键字用来声明独立于对象的静态变量时,无论一个类实例化多少对象,它的静态变量都只有一份拷贝。 静态变量也被称为类变量。局部变量不能被声明为 static 变量。这个和 Python 中 class variable(类变量)有异曲同工之妙。

public class Test {public static void main(String[] args)  {MyClass c1 = new MyClass();MyClass c2 = new MyClass();System.out.println(c1.var); // Output: 1c1.var = 2;System.out.println(c2.var); // Output: 2}
}class MyClass {public static int var = 1;
}

2.2 静态方法

当 static 关键字用来声明独立于对象的静态方法时,该静态方法不能使用其类的非静态变量。这和 Python 的 staticmethod(静态方法) 有异曲同工之妙。虽然静态方法无法访问其类的非静态变量,但是静态方法仍有其作用,它可以作为一种辅助方法,处理由参数传入的数据,并返回。

三、final 和 static 的区别和联系

3.1 联系

关键字 final 和 static 都属于 Java 的非访问修饰符,都是为了实现某一特定功能而存在的。

3.2 区别

经常有人会把这两者混淆,尽管它们经常一起配合使用来创建常量,但它们的功能完全不一样。简单点说,final 只是保证无法被改变,static 保证只存在一个副本。

相关文章:

Java 中的关键字 final 和 static

一、关键字 final final 修饰符可以用来修饰类、方法和变量&#xff0c;final 修饰的类不能够被继承&#xff0c;修饰的方法不能被继承类重新定义&#xff0c;修饰的变量为常量&#xff0c;是不可修改的。 1.1 final 变量 final 有"最后的、最终的"的含义&#xf…...

Spring Cloud OpenFeign 全教程

1. 声明式 REST 客户端&#xff1a; Feign Feign 是一个声明式的 Web Service 客户端。它使编写 Web Service 客户端更容易。要使用 Feign&#xff0c;需要创建一个接口并对其进行注解。它有可插拔的注解支持&#xff0c;包括 Feign 注解和 JAX-RS 注解。Feign 还支持可插拔的…...

LLaMA模型论文《LLaMA: Open and Efficient Foundation Language Models》阅读笔记

文章目录 1. 简介2.方法2.1 预训练数据2.2 网络架构2.3 优化器2.4 高效的实现 3.论文其余部分4. 参考资料 1. 简介 LLaMA是meta在2023年2月开源的大模型&#xff0c;在这之后&#xff0c;很多开源模型都是基于LLaMA的&#xff0c;比如斯坦福大学的羊驼模型。 LLaMA的重点是比…...

了解Unity编辑器 之组件篇Effects(十一)

一、Halo&#xff1a;是一个可用于游戏对象的特效组件&#xff0c;它可以在对象周围添加一个光晕效果 Color属性: 用于设置Halo的颜色。你可以通过选择颜色面板中的颜色来指定光晕的外观。选择适当的颜色可以使光晕与游戏场景中的其他元素相匹配或突出显示。 Size属性: 用于设…...

笔记整理-SpringBoot中的扩展点

SpringBoot有哪些扩展点 aware 感知类接口 aware系列的扩展接口&#xff0c;允许spring应用感知/获取特定的上下文环境或对象。bean生命周期控制类接口 bean生命周期类的接口&#xff0c;可以控制spring容器对bean的处理。app生命周期控制类接口 app生命周期控制类接口&#xf…...

各系统的目录信息路径

Windows系统: 查看系统版本——C:\boot.ini IIS配置文件——C:\windows\system32\inetsrv\MetaBase.xml 存储Windows系统初次安装的密码——C:\windows\repair\sam Mysql配置——C:\ProgramFiles\mysql\my.ini MySQL root密码——C:\P…...

Asp.Net 使用Log4Net (封装帮助类)

Asp.Net 使用Log4Net (封装帮助类) 1. 创建Log4Net帮助类 首先&#xff0c;在你的项目中创建一个Log4Net帮助类&#xff0c;用于封装Log4Net的配置和日志记录逻辑。 using log4net; using log4net.Config;public class LogHelper {private static readonly ILog log LogMan…...

全志F1C200S嵌入式驱动开发(lcd屏幕驱动)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 lcd RGB屏幕作为比较经济、实用的显示工具,在实际场景中使用较多。它的信号来说,一般也比较简单,除了常规的数据信号,剩下来就是行同步、场同步、数据使能和时钟信号了。数据信…...

dubbo原理框架设计

dubbo原理框架设计 &#xff08;1&#xff09;config 配置层&#xff1a;对外配置接口&#xff0c;以 ServiceConfig, ReferenceConfig 为中心&#xff0c;可以直接初始化配置类&#xff0c;也可以通过 spring 解析配置生成配置类。 &#xff08;2&#xff09;proxy 服务代理…...

【数据挖掘】使用 LSTM 进行时间和序列预测

一、说明 每天&#xff0c;人类在执行诸如过马路之类的任务时都会做出被动预测&#xff0c;他们估计汽车的速度和与汽车的距离&#xff0c;或者通过猜测球的速度并相应地定位手来接球。这些技能是通过经验和实践获得的。然而&#xff0c;由于涉及众多变量&#xff0c;预测天气或…...

Typescript第四章 函数(声明和调用,注解参数类型,多态,类型别名,泛型)

第四章 函数 ts中声明和调用函数的不同方式签名重载多态函数多态类型声明 4.1 声明和调用函数 在js中函数是一等对象&#xff0c;我们可以像对象那样使用函数&#xff0c;可以复制给变量&#xff0c;可以作为参数传递&#xff0c;返回值&#xff0c;赋值给对象的原型&#x…...

大数据-Spark批处理实用广播Broadcast构建一个全局缓存Cache

1、broadcast广播 在Spark中&#xff0c;broadcast是一种优化技术&#xff0c;它可以将一个只读变量缓存到每个节点上&#xff0c;以便在执行任务时使用。这样可以避免在每个任务中重复传输数据。 2、构建缓存 import org.apache.spark.sql.SparkSession import org.apache.s…...

Android Service的生命周期,两种启动方法,有什么区别

Android Service的生命周期&#xff0c;两种启动方法&#xff0c;有什么区别 Android Service是一种后台组件&#xff0c;用于在后台执行长时间运行的任务&#xff0c;而无需与用户界面进行交互。Service具有自己的生命周期&#xff0c;其主要包含以下几个状态&#xff1a;创建…...

测试开源C#人脸识别模块ViewFaceCore(5:质量检测和眼睛状态检测)

ViewFaceCore模块中的FaceQuality支持预测人脸质量&#xff0c;最初以为是预测人体体重&#xff0c;实际测试过程中才发现是评估人脸图片质量&#xff0c;主要调用Detect函数执行图片质量检测操作&#xff0c;其函数原型如下所示&#xff1a; //// 摘要:// 人脸质量评估///…...

Go语言网络库net/http

Go语言网络库net/http Http 协议(Hyper Text Transfer Protocol&#xff0c;超文本传输协议)是一个简单的请求-响应协议&#xff0c;它通常运行在 TCP 之 上。超文本传输协议是互联网上应用最为广泛的一种网络传输协议&#xff0c;所有的WWW文件都必须遵守这个标准。 Http 协…...

Acwing.91 最短Hamilton路径(动态规划)

题目 给定一张n个点的带权无向图&#xff0c;点从0~n-1标号&#xff0c;求起点0到终点n-1的最短Hamilton路径。Hamilton路径的定义是从0到n-1不重不漏地经过每个点恰好一次。 输入格式 第—行输入整数n。 接下来n行每行n个整数&#xff0c;其中第i行第j个整数表示点i到j的距…...

[hfut] [important] v4l2 vedio使用总结/opevx/ffpeg/v4l2/opencv/cuda

(158条消息) linux驱动camera//test ok_感知算法工程师的博客-CSDN博客 (158条消息) linux V4L2子系统——v4l2架构&#xff08;1&#xff09;之整体架构_感知算法工程师的博客-CSDN博客 (158条消息) linux V4L2子系统——v4l2的结构体&#xff08;2&#xff09;之video_devi…...

2023年深圳杯数学建模A题影响城市居民身体健康的因素分析

2023年深圳杯数学建模 A题 影响城市居民身体健康的因素分析 原题再现&#xff1a; 以心脑血管疾病、糖尿病、恶性肿瘤以及慢性阻塞性肺病为代表的慢性非传染性疾病&#xff08;以下简称慢性病&#xff09;已经成为影响我国居民身体健康的重要问题。随着人们生活方式的改变&am…...

指令调度(Instruction Scheduling)

指令调度&#xff08;Instruction Scheduling&#xff09; 指令调度的约束基本机器模型基本块调度全局调度 指令调度是为了提高指令级并行&#xff08;ILP&#xff09;&#xff0c;对于超长指令字&#xff08;VLIW, Very Long Instruction Word&#xff09;和多发射系统&#x…...

【运维】Linux 跨服务器复制文件文件夹

【运维】Linux 跨服务器复制文件文件夹 如果是云服务 建议用内网ip scp是secure copy的简写&#xff0c;用于在Linux下进行远程拷贝文件的命令&#xff0c;和它类似的命令有cp&#xff0c;不过cp只是在本机进行拷贝不能跨服务器&#xff0c;而且scp传输是加密的。可能会稍微影…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下&#xff0c;商品详情API作为连接电商平台与开发者、商家及用户的关键纽带&#xff0c;其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息&#xff08;如名称、价格、库存等&#xff09;的获取与展示&#xff0c;已难以满足市场对个性化、智能…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

力扣热题100 k个一组反转链表题解

题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...

解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用

在工业制造领域&#xff0c;无损检测&#xff08;NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统&#xff0c;以非接触式光学麦克风技术为核心&#xff0c;打破传统检测瓶颈&#xff0c;为半导体、航空航天、汽车制造等行业提供了高灵敏…...

Linux 下 DMA 内存映射浅析

序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存&#xff0c;但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程&#xff0c;可以参考这篇文章&#xff0c;我觉得写的非常…...

多元隐函数 偏导公式

我们来推导隐函数 z z ( x , y ) z z(x, y) zz(x,y) 的偏导公式&#xff0c;给定一个隐函数关系&#xff1a; F ( x , y , z ( x , y ) ) 0 F(x, y, z(x, y)) 0 F(x,y,z(x,y))0 &#x1f9e0; 目标&#xff1a; 求 ∂ z ∂ x \frac{\partial z}{\partial x} ∂x∂z​、 …...