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 来创建只写字段。这样,你就能精细控制外部代码如何与对象的数据交互。
挑战
简单让我们构建一个 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: falseFahrenheit: 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) 保留一位小数
}
}
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
面向对象编程中的所有课
自己练习: Java 在线编译器