### JavaBean 在Java中,有很多`class`的定义都符合这样的规范: - 若干`private`实例字段; - 通过`public`方法来读写实例字段。 ```java public class Person { private String name; private int age; public String getName() { return this.name; } public void setName(String name) { this.name = name; } public int getAge() { return this.age; } public void setAge(int age) { this.age = age; } } ``` 如果读写方法符合以下这种命名规范: ```java // 读方法: public Type getXyz() // 写方法: public void setXyz(Type value) ``` 那么这种`class`被称为`JavaBean` 上面的字段是`xyz`,那么读写方法名分别以`get`和`set`开头,并且后接大写字母开头的字段名`Xyz`,因此两个读写方法名分别是`getXyz()`和`setXyz()`。`boolean`字段比较特殊,它的读方法一般命名为`isXyz()` 我们通常把一组对应的读方法(`getter`)和写方法(`setter`)称为属性(`property`),只有`getter`的属性称为只读属性(read-only),只有`setter`的属性称为只写属性(write-only)。属性只需要定义`getter`和`setter`方法,不一定需要对应的字段。 可以看出,`getter`和`setter`也是一种数据封装的方法 ### JavaBean的作用 JavaBean主要用来传递数据,即把一组数据组合成一个JavaBean便于传输。此外,JavaBean可以方便地被IDE工具分析,生成读写属性的代码,主要用在图形界面的可视化设计中。 通过IDE,可以快速生成`getter`和`setter`。 ### 枚举JavaBean属性 要枚举一个JavaBean的所有属性,可以直接使用Java核心库提供的`Introspector`: ```java public class Main { public static void main(String[] args) throws Exception { BeanInfo info = Introspector.getBeanInfo(Person.class); for (PropertyDescriptor pd : info.getPropertyDescriptors()) { System.out.println(pd.getName()); System.out.println(" " + pd.getReadMethod()); System.out.println(" " + pd.getWriteMethod()); } } } class Person { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } ```