在Java中,有不少class的定義都符合這樣的規範: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; } }
若是讀寫方法符合如下這種命名規範:this
// 讀方法: public Type getXyz() // 寫方法: public void setXyz(Type value)
那麼這種class被稱爲JavaBean:spa
上面的字段是xyz,那麼讀寫方法名分別以get和set開頭,而且後接大寫字母開頭的字段名Xyz,所以兩個讀寫方法名分別是getXyz()和setXyz()。設計
boolean字段比較特殊,它的讀方法通常命名爲isXyz():3d
// 讀方法: public boolean isChild() // 寫方法: public void setChild(boolean value)
咱們一般把一組對應的讀方法(getter)和寫方法(setter)稱爲屬性(property)。例如,name屬性:code
只有getter的屬性稱爲只讀屬性(read-only),例如,定義一個age只讀屬性:blog
相似的,只有setter的屬性稱爲只寫屬性(write-only)。繼承
很明顯,只讀屬性很常見,只寫屬性不常見。ip
屬性只須要定義getter和setter方法,不必定須要對應的字段。例如,child只讀屬性定義以下:
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 boolean isChild() { return age <= 6; } }
能夠看出,getter和setter也是一種數據封裝的方法。
JavaBean主要用來傳遞數據,即把一組數據組合成一個JavaBean便於傳輸。此外,JavaBean能夠方便地被IDE工具分析,生成讀寫屬性的代碼,主要用在圖形界面的可視化設計中。
經過IDE,能夠快速生成getter和setter。例如,在Eclipse中,先輸入如下代碼:
public class Person { private String name; private int age; }
而後,點擊右鍵,在彈出的菜單中選擇「Source」,「Generate Getters and Setters」,在彈出的對話框中選中須要生成getter和setter方法的字段,點擊肯定便可由IDE自動完成全部方法代碼。
要枚舉一個JavaBean的全部屬性,能夠直接使用Java核心庫提供的Introspector:
import java.beans.*;
Run
運行上述代碼,能夠列出全部的屬性,以及對應的讀寫方法。注意class屬性是從Object繼承的getClass()方法帶來的。
JavaBean是一種符合命名規範的class,它經過getter和setter來定義屬性;
屬性是一種通用的叫法,並不是Java語法規定;
能夠利用IDE快速生成getter和setter;
使用Introspector.getBeanInfo()能夠獲取屬性列表