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

Java set 方法和static 方法的用途

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

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


具体示例

public class MyClass {
    private int field1; // 字段1
    private int field2; // 字段2

    // 构造函数初始化字段
    public MyClass(int q, int p) {
        this.field1 = p;
        this.field2 = q;
    }

    // setter 方法修改字段1
    public 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 方法修改字段1
        myObject.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.0
        calc.calculateProduct(5, 6);   // 输出:Stored Product: 30.0
    }
}
  • 如果 addmultiply 是实例方法,我们需要创建一个 Calculator 对象才能调用它们,而它们实际上与对象状态无关。
  • 假设Calculator还有一个字段:指定的你要存储的文件名作为路径,那么你要存储,就必须知道某个实例的this.filename,而 storeResult 是静态方法,则不行。
如果缺少构造函数和 set 方法

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

 


http://www.kler.cn/a/523492.html

相关文章:

  • 【新春特辑】2025年1月科技浪潮中的AI最新时事与科技趋势
  • 青少年编程与数学 02-008 Pyhon语言编程基础 07课题、数字
  • 【重生之我在学习C语言指针详解】
  • Python NumPy(7):连接数组、分割数组、数组元素的添加与删除
  • 17.Word:李楠-学术期刊❗【29】
  • FireFox | Google Chrome | Microsoft Edge 禁用更新 final版
  • ELF动态信息
  • 读书笔记:《华为突围ERP封锁全纪实》
  • wordpress代码结构解析
  • macbook安装go语言
  • 系统架构设计中的需求分析与建模
  • 【deepseek】deepseek-r1本地部署-第一步:下载LM Studio
  • 万字长文总结前端开发知识---JavaScriptVue3Axios
  • 请举例用js实现数组的排序?
  • 4.贪心算法
  • “开源AI智能名片2+1链动模式S2B2C商城小程序源码”在市场推广中的应用与策略
  • 深拷贝、浅拷贝、移动语义
  • Leetcode — 罗马数字转整数
  • leetcode 1343. 大小为 K 且平均值大于等于阈值的子数组数目
  • 虚幻基础07:蓝图接口
  • 2025春招,Netty面试题汇总
  • Vue.js 深度解析:响应式、虚拟 DOM 与编译优化的艺术
  • 一文了解性能优化的方法
  • 自定义数据集,使用 PyTorch 框架实现逻辑回归并保存模型,然后保存模型后再加载模型进行预测
  • 重回C语言之老兵重装上阵(十四)C语言头文件详解
  • LeetCode热题100(八)—— 438.找到字符串中所有字母异位词