Sun公司對(duì)JavaBean的定義為:可以重復(fù)利用的軟件組件,它在遵循JavaBean技術(shù)規(guī)范的基礎(chǔ)上提供特定的功能,這些功能模塊可以組成更大規(guī)模的應(yīng)用系統(tǒng)。
到底什么是JavaBean?
先看一段代碼:
/** * @author yong * */ public class Add { public static void main(String[] args) { int a = 10; int b = 20; int c; c = a + b; System.out.println("a+b=" + c); } }
上面的代碼很簡(jiǎn)單,它的功能就是求出a,b的和并且輸出。
但是從軟件工程的角度來(lái)看,上面的代碼有一下幾點(diǎn)不足:
可定制性差,如果現(xiàn)在要求其他的兩個(gè)數(shù)相加那么就必須修改程序代碼重新給a,b賦值才能完成新的需求。
可維護(hù)性差,整段代碼相互緊扣,如果得不到用戶(hù)想要的結(jié)果那么就不得不從頭到尾進(jìn)行檢查。類(lèi)似于上面的代碼還是很簡(jiǎn)單的,但是如果一個(gè)大型的系統(tǒng)寫(xiě)成上面那樣,如果出了問(wèn)題調(diào)試起來(lái)就非常費(fèi)勁了。
復(fù)用性差,如果系統(tǒng)的不止一個(gè)地方需要用到上面代碼的功能那么就不得不在整個(gè)代碼中寫(xiě)兩邊幾乎完全一樣的代碼。
上面的這些問(wèn)題隨著系統(tǒng)的增大而越發(fā)的明顯,從而上面的代碼的價(jià)值也會(huì)隨著系統(tǒng)的增大而變得越來(lái)越小。
于是JavaBean技術(shù)出現(xiàn)了,簡(jiǎn)單的說(shuō)JavaBean就是普通的java類(lèi),和其他的普通類(lèi)的區(qū)別就在于在遵循JavaBean規(guī)范的前提下對(duì)一些功能進(jìn)行封裝,并對(duì)外界提供可以調(diào)用的方法接口,從而可以提高代碼的復(fù)用性,而且如果程序出問(wèn)題可以很容易的把錯(cuò)誤定位在某個(gè)模塊使程序的調(diào)試、開(kāi)發(fā)的效率提高,同時(shí)也方便了合作開(kāi)發(fā),你一個(gè)Bean我一個(gè)Bean各不干擾。
改造后的代碼:
/** * @author yong * */ public class AddBean { private int a; private int b; //求a,b兩個(gè)數(shù)的和 public int add(int a,int b){ return a+b; } //打印a,b兩個(gè)數(shù)的和 public void print(){ System.out.println("a+b="+(a+b)); } //獲取a的值 public int getA(){ return a; } //給a賦值 public void setA(int a){ this.a=a; } //獲取b的值 public int getB(){ return b; } //給b賦值 public void setB(int b){ this.b=b; } }
上面的這個(gè)類(lèi)就是一個(gè)簡(jiǎn)單的JavaBean
如此看來(lái)JavaBean和vb6.0當(dāng)中我們把相似的代碼提出來(lái)構(gòu)成一個(gè)過(guò)程的思路異曲同工,甚至可以說(shuō)JavaBean和微軟的com組件是一個(gè)作用的,都是封裝代碼然后供其他的代碼調(diào)用,從而方便開(kāi)發(fā)。
調(diào)用代碼:
/** * @author yong * */ public class Test { public static void main(String[] args){ //新建addbean對(duì)象 AddBean add=new AddBean(); //設(shè)置a,b的值 add.setA(10); add.setB(20); //調(diào)用AddBean的方法打印a,b的和 add.print(); } }
JavaBean的種類(lèi)
JavaBean大體可以分兩類(lèi):第一類(lèi)是可視化的,第二類(lèi)是非可視化的
可視化JavaBean就是就是帶有界面的java類(lèi),如按鈕,文本框等等類(lèi)似于VB當(dāng)中的控件。只不過(guò)一般情況下在java中我們沒(méi)有像VB中那樣對(duì)控件進(jìn)行拖拖拽拽,但是有些IDE可以實(shí)現(xiàn)和VB類(lèi)似的功能例如JBuilder或者eclipse里面的Swing/Matisse插件等。
非可視化的JavaBean就是沒(méi)有界面的的java類(lèi),例如上面的那段實(shí)現(xiàn)a,b求和并輸出的類(lèi)就是一個(gè)非可視化的JavaBean。這些JavaBean把功能進(jìn)行封裝方便其他的類(lèi)的調(diào)用所以在web開(kāi)發(fā)當(dāng)中用到的JavaBean大多是非可視化的JavaBean。
JavaBean的編碼規(guī)則
JavaBean的編碼規(guī)范在sun公司的網(wǎng)站上可以下載到(官網(wǎng)下載的速度有限,現(xiàn)在已將文檔上傳到我的文檔中,需要的童鞋可以去下載),100多頁(yè)的英文PDF文檔相當(dāng)磨練人的耐心,在這里總結(jié)如下幾條。
1、每個(gè)屬性必須有對(duì)應(yīng)的屬性獲取和設(shè)置方法,即每個(gè)屬性必須要提供相對(duì)應(yīng)的個(gè)getter和setter方法。
2、如果一個(gè)屬性的類(lèi)型為boolean類(lèi)型,則屬性對(duì)應(yīng)的獲取和設(shè)置方法就有所不同,例如某個(gè)boolean類(lèi)型的屬性名為isLuck那么相對(duì)應(yīng)的屬性獲取方法為isLuck()屬性設(shè)置方法為setLuck()。
3、所有屬性最好是私有變量,即各個(gè)類(lèi)的屬性最好設(shè)置為private,對(duì)屬性的取值和賦值操作要通過(guò)對(duì)應(yīng)的取值賦值方法進(jìn)行
4、所有的方法要設(shè)置為共有方法,即所有方法要設(shè)這為public
以上總結(jié)的幾條就是編寫(xiě)非可視化JavaBean需要遵循的編碼規(guī)范,只有這樣別的開(kāi)發(fā)者才能方便的調(diào)用JavaBean中提供的功能方法。
為什么屬性都要設(shè)置成私有,方法都要設(shè)置成共有呢?