在Java中,有很多class的定义都符合这样的规范:
若干private实例字段;
通过public方法来独写实例字段;
之前获取和设置字段都是以以下方式:
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; } }
如果读写方法符合以下命名规范:
public Type getXyz() public void setXyz(Type value)
那么这种class被称为JavaBean。
上面的字段是xyz,那么读写方法分别以get和set开头,
并且后接大写字母开头的字段名Xyz。
还有一种叫做boolean,它的读方法一般命名为isXyz():
public boolean isChild() public void setChild(boolean value)
我们通常把一组对应的读方法(getter)和写方法(setter)称为属性(property).
对应的读方法是 String getName()
对应的写方法是 setName(String)
只有getter的属性称为只读属性(read-only),例如,定义一个age只读属性:
对应的读方法是int getAge()
JavaBean的作用
JavaBean主要用来传递数据,即把一组数据组合成一个JavaBean便于传输。
此外,JavaBean可以方便被IDE工具分析,生成独写属性的代码,主要用在图形接面的可视化设计中。
枚举JavaBean属性
要枚举一个JavaBean属性,可以直接使用Java核心库Inrospector:
package com.imooc.iexecption; import java.beans.BeanInfo; import java.beans.Introspector; import java.beans.PropertyDescriptor; 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; } } public class catchExample2 { 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()); } } } // 结果 //age //public int com.imooc.iexecption.Person.getAge() //public void com.imooc.iexecption.Person.setAge(int) //class //public final native java.lang.Class java.lang.Object.getClass() // null //name //public java.lang.String com.imooc.iexecption.Person.getName() //public void com.imooc.iexecption.Person.setName(java.lang.String)
通过上述代码,可以列出所有的属性,以及对应的读写方法。
注意class属性Object继承的getClass()方法带来的。