那么什么是編碼規范呢?
編碼規范就是使用一種語言編寫代碼時,要遵守的一些約定俗成,或是長期經驗總結而成的規矩,這些規矩并不是一定要執行的,也就是說,不執行它,程序照樣能編譯通過,照樣能運行起來,那么我們為什么要去遵守它呢?這是因為我們編寫的程序并不僅僅是只給自己一個人看的,在現代軟件開發中,往往是由多個人共同完成軟件的開發工作,由一個人獨立完成大型軟件的開發工作,幾乎是不可能的。而且在軟件開發完成,進入到軟件維護階段后,對軟件的維護工作也很可能是由其他人員來進行。那么,編寫出的代碼就需要多個人去閱讀。如果每個人都按照自己的習慣去寫代碼,就會給其他讀代碼的人造成很大的困擾,從而影響他對程序的理解、判斷,影響他對程序的所進行的維護和改進工作。那么有了編碼規范,大家都遵循統一的規范去做,就會大大提高代碼的可讀性,使開發人員能夠迅速而徹底的理解代碼,從而提高工作效率。另外,遵守編碼規范對于我們編寫代碼的人來說,也是有利的,隨著程序的復雜程度的加深,我們所編寫的代碼行逐步增多,如果沒有在一開始嚴格遵守規范,而是隨性編寫,那么在后期也會對我們自己閱讀代碼造成影響,而且更為嚴重的是,降低了代碼的健壯性,使代碼變得容易出錯,而不易維護了。
基于上述原因,做為一個合格程序員,嚴格遵守編碼規范是基本條件。
先來說說“程序編寫規范”,實際上這個標題是“java編碼規范”的第一章節的標題,看了內容,感覺不太恰當,可是一時又不知道改什么名好,就照著他的來吧。
1、exit() 除了在 main() 中可以被調用外,其他的地方不應該被調用。
這樣做是因為不給任何代碼截獲退出的機會。比如,一個類似后臺服務的程序不應該因為某一個庫模塊決定了要退出就退出。
2、聲明的錯誤應該拋出一個RuntimeException或者其派生的異常。頂層的main()函數應該截獲所有的異常,并且打印(或者記錄在日志中)在屏幕上。
3、java使用成熟的后臺垃圾收集技術來代替引用計數。但是,請記住,java的垃圾收集技術只會對內存中的“垃圾”進行清理,而不會對其他資源,諸如:數據庫、磁盤、打印機等進行清理工作。因此你必須在使用完這些對象的實例以后進行清場工作。比如:
FileOutputStream fos = new FileOutputStream(projectFile);
project.save(fos, "IDE Project File");
fos.close(); //對文件輸出流對象進行關閉(清場工作)
4、Clone,下面是一種有用的方法:
implements Cloneable
public Object clone()
{
try
{
ThisClass obj = (ThisClass)super.clone();
obj.field1 = (int[])field1.clone();
obj.field2 = field2;
return obj;
}
catch(CloneNotSupportedException e)
{
throw new InternalError("Unexpected CloneNotSUpportedException: " + e.getMessage());
}
}
這里……我不太看得明白他所寫的意思,對于clone()方法我大概知道它是java的根類Object中的一個方法,其作用是創建并返回一個當前對象的拷貝,即是“克隆”一個和當前對象一模一樣的另一個對象。那么Cloneable是什么?查了API幫助,知道了,Cloneable是一個接口,只有實現了這個Cloneable接口的類的實例才可以用繼承自Object類的clone()方法進行“克隆”,沒有實現這個接口的類的實例若調用clone()方法,則會拋出“CloneNotSupportedException”異常。不過,好奇怪,查看了它的源代碼,僅僅有一個接口名字,沒有聲明任何的方法或是常量,基本類庫中為什么會有這樣一個接口哩?既然所有的類都直接或間接繼承自Object類,那為什么還要用一個Cloneable接口來限制其子類能否進行“克隆”操作哩?現在還弄不明白。
3、final 類,絕對不要因為性能的原因將類定義為 final 的(除非程序的框架要求)。
最好在類文檔中注明一個類目前不能被繼承,而不要將它定義為 final 的。因為沒有人可以保證會不會由于什么原因需要繼承它。(那么,盡量少用final類,呵呵,到目前為止我還沒用到過final類,真想知道什么時候一定會用到final類,好象沒有地方需要呀)
4、訪問類的成員變量,大部分的類成員變量應該定義為 protected 的來防止繼承類使用他們。
這里……我又不明白了,記得學java的訪問權限修飾符時,protected修飾的類成員,僅在類內和類的派生類中可見,把類成員定義為protected,怎么能夠防止繼承類(派生類)使用哩?如果定義為private,才可能不被繼承類使用吧?

5、對于數組的聲明,要用“int[] packets”,而不是“int packets[]”,后一種永遠也不要用。
這個……,對于后一種,java中好象沒有硬性規定不可以用(C#中倒是只承認前一種聲明數組的形式),但寫成前一種形式,更具意義一些。