在Java面向对象编程中,属性封装是核心设计原则之一,通过将类的属性设置为私有访问权限,再对外提供公共的getter和setter方法,既能保护属性的访问安全,又能灵活控制属性的读写逻辑,而getter和setter方法的设计需要遵循统一的规范才能保证代码的规范性和可读性。

getter和setter方法的基础设计规范
首先,类的属性必须声明为private权限,这是封装的前提,外部无法直接访问属性,只能通过类提供的方法操作属性。getter方法用于获取属性值,setter方法用于设置属性值,两者的命名和返回值、参数都有固定要求。
命名规范
getter方法的命名规则为:如果属性是布尔类型,方法名以is开头,后面拼接属性名首字母大写;其他类型的属性,方法名以get开头,后面拼接属性名首字母大写。setter方法统一以set开头,后面拼接属性名首字母大写,方法无返回值。
参数与返回值规范
getter方法不需要参数,返回值类型要和对应属性的类型一致。setter方法需要一个参数,参数类型和对应属性的类型一致,方法本身没有返回值,也就是返回类型为void。
标准代码示例
以下是一个符合规范的Java类示例,包含不同类型的属性以及对应的getter和setter方法:
public class User {
// 私有属性,外部无法直接访问
private String name;
private int age;
private boolean isStudent;
// name属性的getter方法
public String getName() {
return name;
}
// name属性的setter方法
public void setName(String name) {
this.name = name;
}
// age属性的getter方法
public int getAge() {
return age;
}
// age属性的setter方法
public void setAge(int age) {
// 可以在setter中添加校验逻辑,保证数据合法性
if (age >= 0 && age <= 150) {
this.age = age;
} else {
throw new IllegalArgumentException("年龄必须在0到150之间");
}
}
// 布尔类型属性的getter方法,以is开头
public boolean isStudent() {
return isStudent;
}
// 布尔类型属性的setter方法
public void setStudent(boolean student) {
isStudent = student;
}
}
setter方法中的逻辑扩展
setter方法不只是简单的赋值操作,还可以在方法内部添加必要的校验逻辑,避免非法数据被设置到属性中,这也是封装的重要优势。比如上面的setAge方法就添加了年龄范围的校验,当传入非法年龄时会抛出异常,保证属性的合法性。
如果某个属性只允许读取不允许修改,可以只提供getter方法,不提供setter方法,这样的属性就是只读属性。比如下面的类中,id属性生成后不允许修改,就只提供getter:
public class Order {
private String id;
// 构造方法中初始化id
public Order(String id) {
this.id = id;
}
// 只提供getter,不提供setter,实现只读属性
public String getId() {
return id;
}
}
常见设计误区
- 不要将属性设置为
public权限后还添加getter和setter,这样完全失去了封装的意义,外部可以直接访问属性,封装逻辑无法生效。 - 不要在getter方法中修改属性的值,getter方法只负责返回当前属性值,不应该有副作用,否则会导致代码逻辑混乱。
- 布尔类型属性的getter方法不要错误使用
get开头,虽然语法上不会报错,但不符合Java的通用开发规范,会降低代码的可读性。
IDE自动生成方法的注意事项
很多开发者会使用IDE的自动生成功能来创建getter和setter方法,这种方式效率很高,但生成后需要检查是否符合当前类的业务需求。比如如果属性有特殊的校验逻辑,自动生成的setter方法只有赋值语句,需要手动补充校验代码。另外如果属性是布尔类型,要确认自动生成的getter方法是否以is开头,部分旧版本的IDE可能会生成get开头的方法,需要手动调整。
Javagetter_setter属性封装面向对象修改时间:2026-07-22 18:09:33