Menu
CoddyTech

Getter 和 Setter 方法

本课属于 Coddy Java 学习旅程的“面向对象编程”单元。第 11 课,共 87 课。

获取器和设置器是用于受控访问私有字段的方法。获取器用于获取字段的值,而设置器用于修改字段的值。

命名约定遵循标准模式:前缀为 get 或 set,后面接首字母大写的字段名。

public class Product {
    private String name;
    private double price;
    
    // name 的获取方法
    public String getName() {
        return name;
    }
    
    // name 的设置方法
    public void setName(String name) {
        this.name = name;
    }
    
    // price 的获取方法
    public double getPrice() {
        return price;
    }
    
    // 带验证的设置方法
    public void setPrice(double price) {
        if (price >= 0) {
            this.price = price;
        }
    }
}

setter 的真正作用在于可以添加验证逻辑。在上面的示例中,setPrice 只接受非负值,从而保护对象免受无效数据的影响。

对于 boolean 字段,获取器通常使用前缀 is,而不是 get:

private boolean active;

public boolean isActive() {
    return active;
}

你也可以只提供 getter 来创建只读字段,或只提供 setter 来创建只写字段。这样,你就能精细控制外部代码如何与对象的数据交互。

challenge icon

挑战

简单

让我们构建一个 Temperature 转换器,展示带有验证逻辑的 getter 和 setter 的强大之处。

你将创建两个文件来组织代码:

  • Temperature.java:定义一个 Temperature 类,用于存储以摄氏度表示的温度值。这个类应包含:
    • 一个私有的 celsius 字段(double)
    • 一个私有的 valid 字段(boolean),用于记录温度在物理上是否可能
    • 一个 getter getCelsius(),用于返回 celsius 值
    • 一个 setter setCelsius(),只接受大于或等于绝对零度(-273.15)的值。如果值有效,就将 valid 设置为 true;否则,不更改 celsius,并将 valid 设置为 false
    • 一个用于 boolean 字段的 getter isValid()(请记住:boolean getter 使用 is 前缀)
    • 一个 getter getFahrenheit(),使用公式 (celsius * 9/5) + 32 转换并返回华氏温度
  • Main.java:创建一个 Temperature 对象,将一个摄氏度数值作为输入读取,使用 setter 设置这个值,然后输出温度是否有效及其对应的华氏温度。输出格式为两行:
    • Valid: true 或 Valid: false
    • Fahrenheit: X.X(保留一位小数)

你将收到一个输入:一个表示摄氏温度的 double 值。

要将华氏温度输出格式化为一位小数,你可以使用 String.format("%.1f", value)。

亲手试试

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        double celsiusInput = scanner.nextDouble();
        
        // TODO: 创建一个 Temperature 对象
        
        // TODO: 使用 setter 设置 celsius 的值
        
        // TODO: 输出温度是否有效(格式:"Valid: true" 或 "Valid: false")
        
        // TODO: 输出对应的华氏温度(格式:"Fahrenheit: X.X")
        // 提示:使用 String.format("%.1f", value) 保留一位小数
    }
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

面向对象编程中的所有课

自己练习: Java 在线编译器