Java set 方法和static 方法的用途

同一个对象的同一个字段先通过 构造函数 初始化,然后再通过 setter 方法 修改,是完全合法的,这在 Java 中是一个非常常见的操作

构造函数初始化的字段值,setter 方法在对象的生命周期中动态修改字段的值。这种覆盖是预期中的操作


具体示例

public class MyClass {private int field1; // 字段1private int field2; // 字段2// 构造函数初始化字段public MyClass(int q, int p) {this.field1 = p;this.field2 = q;}// setter 方法修改字段1public void setField1(int pp) {this.field1 = pp;}// getter 方法获取字段值public int getField1() {return field1;}public int getField2() {return field2;}
}

外部代码使用:

public class Main {public static void main(String[] args) {// 用构造函数初始化字段MyClass myObject = new MyClass(10, 20);System.out.println("初始值:field1 = " + myObject.getField1() + ", field2 = " + myObject.getField2());// 使用 setter 方法修改字段1myObject.setField1(50);System.out.println("修改后:field1 = " + myObject.getField1() + ", field2 = " + myObject.getField2());}
}

运行结果:

初始值:field1 = 20, field2 = 10
修改后:field1 = 50, field2 = 10

用处
  1. 初始化和动态更新的分离构造函数用来设置对象创建时的必要值,而 setter 方法用来在后续的程序运行中动态更新值。例如:
                    创建银行账户时,设置初始余额(构造函数),之后更新余额时,用 setter 方法。用户注册时,可以用默认的用户名或昵称,但允许昵称后期更改。

  2.  测试时只需要始终用同一个对象。setter 方法允许在测试中灵活修改对象的字段,便于模拟各种场景


private static 方法和 private 实例方法的用处

private static 方法通常用来执行与具体实例无关的通用逻辑,比如工具类中的方法、静态工厂方法等。private 实例方法用于实现需要访问实例状态或其他实例方法的辅助逻辑。

​​​两者共存的必要

  1. private 实例方法表明方法需要访问或依赖实例状态。如果只有 private static 方法,但某些逻辑需要访问实例变量,也不行。

  2. 如果只有 private 实例方法,但某些方法不依赖实例,仍然需要创建对象来调用这些方法,这显然是多余的。

特性private static 方法private 实例方法
所属类本身类的实例
调用方式ClassName.methodName()instance.methodName()
能否访问实例变量
能否访问静态变量
常用场景与实例无关的通用逻辑、工具方法与实例状态有关的内部辅助逻辑
混合使用场景

以下是 private staticprivate 实例方法在同一类中合理共存的例子:

public class Calculator {private double result; // 实例变量:存储计算结果// private static 方法:通用逻辑,与实例无关private static double add(double a, double b) {return a + b;}private static double multiply(double a, double b) {return a * b;}// private 实例方法:需要访问实例变量private void storeResult(double value) {this.result = value;}// 公共方法:使用静态和实例方法public void calculateSum(double a, double b) {double sum = add(a, b); // 使用 static 方法storeResult(sum);      // 使用实例方法System.out.println("Stored Sum: " + result);}public void calculateProduct(double a, double b) {double product = multiply(a, b); // 使用 static 方法storeResult(product);            // 使用实例方法System.out.println("Stored Product: " + result);}
}

运行示例

public class Main {public static void main(String[] args) {Calculator calc = new Calculator();calc.calculateSum(10, 20);      // 输出:Stored Sum: 30.0calc.calculateProduct(5, 6);   // 输出:Stored Product: 30.0}
}
  • 如果 addmultiply 是实例方法,我们需要创建一个 Calculator 对象才能调用它们,而它们实际上与对象状态无关。
  • 假设Calculator还有一个字段:指定的你要存储的文件名作为路径,那么你要存储,就必须知道某个实例的this.filename,而 storeResult 是静态方法,则不行。
如果缺少构造函数和 set 方法

上一个示例中,没有定义构造函数,也没有定义set 方法。当一个类没有显式定义构造函数时,Java 会提供一个默认的无参构造函数,但它不会初始化实例变量(它们会有默认值)。对于 result 这种 double 类型的变量,它的默认值是 0.0。只有调用 storeResult() 方法时,result 才会被更新。

 

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

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

相关文章

fpga系列 HDL:XILINX Vivado Vitis 高层次综合(HLS) 实现 EBAZ板LED控制(上)

目录 创建工程创建源文件并编写C代码C仿真综合仿真导出RTL CG导出RTL错误处理: 创建工程 创建源文件并编写C代码 创建源文件(Souces下的hlsv.h和hlsv.cpp,Test Bench下的test_hlsv1.cpp): hlsv1.h #ifndef HLSV1 #define HLSV1 #include &l…

定西市建筑房屋轮廓数据shp格式gis无偏移坐标(字段有高度和楼层)内容测评

定西市建筑房屋轮廓数据是GIS(Geographic Information System,地理信息系统)领域的重要资源,用于城市规划、土地管理、环境保护等多个方面。这份2022年的数据集采用shp(Shapefile)格式,这是一种…

学习数据结构(1)时间复杂度

1.数据结构和算法 (1)数据结构是计算机存储、组织数据的方式,指相互之间存在⼀种或多种特定关系的数据元素的集合 (2)算法就是定义良好的计算过程,取一个或一组的值为输入,并产生出一个或一组…

有限元分析学习——Anasys Workbanch第一阶段笔记梳理

第一阶段笔记主要源自于哔哩哔哩《ANSYS-workbench 有限元分析应用基础教程》 张晔 主要内容导图: 笔记导航如下: Anasys Workbanch第一阶段笔记(1)基本信息与结果解读_有限元分析变形比例-CSDN博客 Anasys Workbanch第一阶段笔记(2)网格单元与应力奇…

设计模式Python版 原型模式

文章目录 前言一、原型模式二、原型模式示例三、原型管理器 前言 GOF设计模式分三大类: 创建型模式:关注对象的创建过程,包括单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、原型模式和建造者模式。结构型模式:关注类和对…

【Redis】缓存+分布式锁

目录 缓存 Redis最主要的使用场景就是作为缓存 缓存的更新策略: 1.定期生成 2.实时生成 面试重点: 缓存预热(Cache preheating): 缓存穿透(Cache penetration) 缓存雪崩 (Cache avalan…

小阿卡纳牌

小阿卡纳牌 风:热湿 火:热干 水:冷湿 土:冷干 火风:温度相同,但是湿度不同,二人可能会在短期内十分热情,但是等待热情消退之后,会趋于平淡。 湿度相同、温度不同&#x…

初始JavaEE篇 —— Spring Web MVC入门(上)

找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程程(ಥ_ಥ)-CSDN博客 所属专栏:JavaEE 目录 RequestMappingg 注解介绍 Postman的介绍与使用 PostMapping 与 GetMapping 注解 构造并接收请求 接收简单参数 接收对象…

python -m pip和pip的主要区别

python -m pip和pip的主要区别在于它们与Python环境的关联方式和安装路径。‌ ‌与Python环境的关联方式‌: pip 是直接使用命令行工具来安装Python包,不指定特定的Python解释器。如果系统中存在多个Python版本,可能会导致安装的包被安装到…

golang通过AutoMigrate方法自动创建table详解

一.AutoMigrate介绍 1.介绍 在 Go 语言中,GORM支持Migration特性,支持根据Go Struct结构自动生成对应的表结构,使用 GORM ORM 库的 AutoMigrate 方法可以自动创建数据库表,确保数据库结构与定义的模型结构一致。AutoMigrate 方法非常方便&am…

SuperAGI - 构建、管理和运行 AI Agent

文章目录 一、关于 SuperAGI💡特点🛠 工具包 二、⚙️安装☁️SuperAGI云🖥️本地🌀 Digital Ocean 三、架构1、SuperAGI 架构2、代理架构3、代理工作流架构4、Tools 架构5、ER图 一、关于 SuperAGI SuperAGI 一个开发优先的开源…

CSAPP学习:前言

前言 本书简称CS:APP。 背景知识 一些基础的C语言知识 如何阅读 Do-做系统 在真正的系统上解决具体的问题,或是编写和运行程序。 章节 2025-1-27 个人认为如下章节将会对学习408中的操作系统与计算机组成原理提供帮助,于是先凭借记忆将其简单…

如何实现滑动删除功能

文章目录 1 概念介绍2 使用方法3 示例代码 我们在上一章回中介绍了GestureDetector Widget相关的内容,本章回中将介绍Dismissible Widget.闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 我们在这里介绍的Dismissible是一个事件响应Widget,它和GestureDetector类…

【数据结构】_链表经典算法OJ:环形链表的约瑟夫问题

目录 1. 题目链接及描述 2. 解题思路 3. 程序 1. 题目链接及描述 题目链接:环形链表的约瑟夫问题_牛客题霸_牛客网 题目描述: 编号为 1 到 n 的 n 个人围成一圈。从编号为 1 的人开始报数,报到 m 的人离开。 下一个人继续从 1 开始报数…

装饰SpringMVC的适配器实现响应自动包装

文章目录 1.common-tool-starter1.目录结构2.ResultWrapper.java 2.common-web-starter1.目录结构2.IgnoredResultWrapper.java 自定义注解,忽略对返回结果的自动包装3.ReturnValueHandlersDecorator.java 对适配器进行扩展的装饰器4.WebAutoConfiguration.java 将装…

【PyQt5】数据库连接失败: Driver not loaded Driver not loaded

报错内容如下: 可以看到目前所支持的数据库驱动仅有[‘QSQLITE’, ‘QMARIADB’, ‘QODBC’, ‘QODBC3’, ‘QPSQL’, ‘QPSQL7’] 我在网上查找半天解决方法未果,其中有一篇看评论反馈是可以使用的,但是PyQt5的版本有点低,5.12…

论文笔记(六十三)Understanding Diffusion Models: A Unified Perspective(三)

Understanding Diffusion Models: A Unified Perspective(三) 文章概括 文章概括 引用: article{luo2022understanding,title{Understanding diffusion models: A unified perspective},author{Luo, Calvin},journal{arXiv preprint arXiv:…

【shell工具】编写一个批量扫描IP地址的shell脚本

批量扫描某个网段中的主机(并发) 创建目录编写脚本文件 mkdir /root/ip_scan_shell/ touch /root/ip_scan_shell/online_server.txt touch /root/ip_scan_shell/offline_server.txt touch /root/ip_scan_shell/ip_scan.sh写入下面shell到脚本文件中…

穷举vs暴搜vs深搜vs回溯vs剪枝系列一>解数独

题目: 解析: 部分决策树: 代码设计&剪枝&回溯: 代码: class Solution {private boolean[][] row, col;private boolean[][][] gird; public void solveSudoku(char[][] board) {//下标->数字&#xff…

[EAI-023] FAST: Efficient Action Tokenization for Vision-Language-Action Models

Paper Card 论文标题:FAST: Efficient Action Tokenization for Vision-Language-Action Models 论文作者:Karl Pertsch, Kyle Stachowicz, Brian Ichter, Danny Driess, Suraj Nair, Quan Vuong, Oier Mees, Chelsea Finn, Sergey Levine 论文链接&…