请简要介绍 setters 和 getters 的作用和使用场景。请分别以一个段落的形式给出 setters 和 getters 的介绍，每个段落 4-6 句话，并在每个段落中分别做一个简单示例。注意合理使用换行。请以 markdown 格式输出。
user
```markdown
Setters，也被称为写入器，主要用于赋值。它们提供了一种受控的方式来修改对象的属性，可以在赋值时添加额外的校验逻辑，确保数据的有效性。例如，在一个 `Person` 类中，你可以定义一个 `setName` 方法来设置姓名，同时检查传入的值是否满足特定条件，如不允许空字符串：
```java
public class Person {
    private String name;

    public void setName(String name) {
        if (name == null  name.isEmpty()) {
            throw new IllegalArgumentException("Name cannot be empty");
        }
        this.name = name;
    }
}
```

Getters，也被称为读取器，用于获取对象的属性值。通过 getters，可以对外部隐藏对象的内部细节，同时在返回属性值之前添加额外的处理逻辑。例如，在同一个 `Person` 类中，你可以定义一个 `getName` 方法来获取姓名，确保返回的值符合预期：
```java
public class Person {
    private String name;

    public String getName() {
        return this.name;
    }
}
```
```
assistant