首頁(yè) 考試吧論壇 Exam8視線 考試商城 網(wǎng)絡(luò)課程 面授課程 模擬考試 實(shí)用文檔 繽紛校園 英語(yǔ)學(xué)習(xí)
2010考研 | 自學(xué)考試 | 成人高考 | 專 升 本 | 法律碩士 | MBA/MPA | 中 科 院
四六級(jí) | 商務(wù)英語(yǔ) | 公共英語(yǔ) | 職稱日語(yǔ) | 職稱英語(yǔ) | 博思 | 口譯筆譯 | GRE GMAT | 日語(yǔ) | 托福
雅思 | 專四專八 | 新概念 | 自考英語(yǔ) | 零起點(diǎn)英、、、、韓語(yǔ) | 在職申碩英語(yǔ)
在職攻碩英語(yǔ) | 成人英語(yǔ)三級(jí)
等級(jí)考試 | 水平考試 | 微軟認(rèn)證 | 思科認(rèn)證 | Oracle認(rèn)證 | Linux認(rèn)證
公務(wù)員 | 報(bào)關(guān)員 | 報(bào)檢員 | 外銷員 | 司法考試 | 導(dǎo)游考試 | 教師資格 | 國(guó)際商務(wù)師 | 跟單員
單證員 | 物流師 | 價(jià)格鑒證師 | 銀行從業(yè)資格 | 證券從業(yè)資格 | 人力資源管理師 | 管理咨詢師
期貨從業(yè)資格 | 社會(huì)工作者
會(huì)計(jì)職稱 | 注會(huì)CPA | 經(jīng)濟(jì)師 | 統(tǒng)計(jì)師 | 注冊(cè)稅務(wù)師 | 評(píng)估師 | 精算師 | 高會(huì) | ACCA | 審計(jì)師
法律顧問 | 會(huì)計(jì)證
建造師一級(jí)、二級(jí)) | 造價(jià)師 | 監(jiān)理師 | 安全師 | 咨詢師 | 結(jié)構(gòu)師 | 建筑師 | 安全評(píng)價(jià)師
估價(jià)師房地產(chǎn)估價(jià)土地估價(jià)) | 設(shè)備監(jiān)理師 | 巖土工程師 | 質(zhì)量資格 | 房地產(chǎn)經(jīng)紀(jì)人 | 造價(jià)員
投資項(xiàng)目管理 | 土地代理人 | 環(huán)保師 | 環(huán)境影響評(píng)價(jià) | 物業(yè)管理師 | 城市規(guī)劃師 | 公路監(jiān)理師
公路造價(jià)工程師 | 招標(biāo)師
執(zhí)業(yè)護(hù)士 | 執(zhí)業(yè)醫(yī)師 | 執(zhí)業(yè)藥師 | 衛(wèi)生資格
 丹丹云 
您現(xiàn)在的位置: 考試吧(Exam8.com) > 軟件水平考試 > 心得技巧 > 正文

JAVA的編程風(fēng)格

    很久以來都在體會(huì)著JAVA的風(fēng)格,現(xiàn)在做一簡(jiǎn)單陳述,希望大家多提寶貴意見。

    對(duì)于一種好的編程語(yǔ)言,學(xué)習(xí)它的編程風(fēng)格是很重要的。每種語(yǔ)言都有自己的編寫和注釋約定,當(dāng)然所有語(yǔ)言都建立在最基本的約定之上。編程中最重要的并不是讓代碼按自己希望的方式運(yùn)行,而是程序中那種自明的編程風(fēng)格(這對(duì)于程序員的益處相信眾多程序員都身有體會(huì))!但這還不夠,程序還應(yīng)該具有可讀、相對(duì)持久和可維護(hù)性。可讀性非常重要,因?yàn)槟悴幌M约阂郧暗淖髌吩谥蟮拈喿x中給自己留下障礙,當(dāng)然,更重要的是自己的程序能讓其他程序員讀懂并且修改。

    下面我把工作中所理解的java風(fēng)格做一簡(jiǎn)單總結(jié),這是我所理解的好的編程風(fēng)格和應(yīng)用中我們應(yīng)當(dāng)如何使用java編寫自己的代碼的小Guide。這并不完全,希望大家?guī)臀谊懤m(xù)總結(jié)各自的經(jīng)驗(yàn)。

    一般性概述

    好的編程風(fēng)格固然重要,但是你一定聽說過一些程序員的個(gè)人風(fēng)格。其實(shí)我們完全不必為那些所謂條條框框所累,但是作為原則是我們至少不能打破這些常規(guī)。我們應(yīng)該在保持自己風(fēng)格的同時(shí)盡量的把自己與編程潛原則靠攏。

     可讀性很容易達(dá)到,比如,讓自己的代碼縮排排列、名字采用描述性但不要過長(zhǎng)(短名應(yīng)僅僅用在非遠(yuǎn)程)、特殊名稱比如pi應(yīng)當(dāng)被定義為final類型。模塊性是編程需要注意的另一重點(diǎn),把代碼劃分到類里,在類中把功能劃分到方法中,別讓一個(gè)類太大,否則在使用、修改和理解上都會(huì)造成不必要的麻煩,方法也一樣,如果一個(gè)方法長(zhǎng)度超過50行,它產(chǎn)生錯(cuò)誤的概率將接近100%,盡量把大方法劃分為小方法,編程中為避免重復(fù)編寫,還應(yīng)盡量調(diào)用JAVA標(biāo)準(zhǔn)類庫(kù)。

    盡量避免在寫代碼和注釋時(shí)使用不同語(yǔ)言,經(jīng)常見到論壇有朋友詢問諸如在java中調(diào)用c、調(diào)用php、調(diào)用shell之類的問題,其實(shí)在編程中,我們應(yīng)盡量使用一種語(yǔ)言去完成事情。另外就是不必最優(yōu)化自己的代碼,應(yīng)該選擇相對(duì)較優(yōu)的算法就可以了。

    類、方法和fields

    類應(yīng)體現(xiàn)出某種物質(zhì)的基本概念,比如要編程實(shí)現(xiàn)“汽車”的組成,那么所有的汽車都可以用類Car實(shí)現(xiàn)。這個(gè)類應(yīng)當(dāng)包括域描述、屬性描述和car的狀態(tài)(color, number of doors, age等)和由car可完成的操作(getColor, setColor等)。為了提高類的可重用性,不要在類中有過多的描述,當(dāng)然這也會(huì)增加錯(cuò)誤產(chǎn)生的機(jī)會(huì)。

    類名首字母大寫,比如Date, String, Hashtable等 ... ...

    類如下定義:(未使用Javadoc做注釋):

代碼:

public class Car {

 /* Instance variables are placed either in the beginning
    or at the end of the class */

 private int age;
 private Color color;
 
 /* The constructor should be placed in the beginning */

 public Car(int age, Color color) {
   this.age = age;
   this.color = color;
 }  

 /* Example method */
 public int getAge() {
   return age;
 }  
 
 /* The main method is optional, but looks like this.
    If it exists, it is either the first or the last
    method in the class */
 
 public static void main(String [] args) {
   ...

 }
}


    注意類名和大括號(hào)間的空格!

    方法

    方法一般定義為public。當(dāng)然,如果方法僅僅在當(dāng)前類用到可以定義為private,而如果希望一個(gè)子類沿用這個(gè)方法則不同,這時(shí)候的方法應(yīng)定義為protected。

    java中的方法定義很有趣,它們一般小寫字母開頭,如果有兩個(gè)字組成,第二個(gè)字的首字母則大寫。因此名字的描述性是至關(guān)重要的。這使你不用閱讀整篇代碼來判斷這是一個(gè)什么方法。在給自己的方法取名時(shí)應(yīng)盡量不要太短或者太長(zhǎng),另一個(gè)需要注意的是大多方法使用動(dòng)詞(動(dòng)賓短語(yǔ))。 

    例如:
    public void eat() {}
    public void eatBananas() {}

    Selector(選擇器)方法有g(shù)et前綴,后綴是它們將要get的,比如
    public int getBananas() {}

    Mutator(存取器)方法則有set前綴,后綴則是他們要set的,比如
    public void setBananas(int amount) {}
    注意mutators大多無(wú)返回值。

    方法的參數(shù)應(yīng)當(dāng)以如下方式給出:
    public void aMethod(type parameter1, type parameter2, ... , type parametern) {}

    如果參數(shù)過長(zhǎng),也可以斷開為幾行,應(yīng)對(duì)齊向下排列如:
    public void aMethod(type parameter1, type parameter2,... ,
                   type parametern, type parameter n+1,... ,
                   type parameterm, type parameter m+1) {}

    另外要注意類的左束括號(hào)應(yīng)在方法的右束括號(hào)之后而非下一行:

代碼:

public int aMethod() {
 int i = 0;
 if(i == 0)
   System.out.println("success!");
}


    為了文件可讀性好,還要注意語(yǔ)句最好寫在同一行,當(dāng)然一行寫不下是可以斷行的,比如行字母超過80。

    fields

    比如變量,如果不希望它永久有效,應(yīng)設(shè)為private。如果一個(gè)變量在類中不發(fā)生任何動(dòng)作(比如數(shù)據(jù)結(jié)構(gòu)中的node)則可以設(shè)置為public,常量一般聲明為public。如果不能確定一個(gè)變量到底該聲明為什么,應(yīng)暫且聲明為private。

    field的名字一般使用小寫字母,不要使用下橫線或其他特殊字符。 如果變量包含兩個(gè)字,那么第二個(gè)字的首字母大寫。比如:

    int i, j, k;
    Date date;
    double myField;

    常量一般全部大寫,也可以包含下橫線:

    public static final int MAX_SIZE_OF_DATABASE

    fields的名字通常為名詞。較重要的fields更應(yīng)具備描述性,比如程序中包含一個(gè)游戲的得分,那可以用score來代表。如果變量變化較頻繁,那使用一個(gè)單一字符來代表就ok了:

i, j, k 通常代表整數(shù)
r, t, u, v, w 通常代表實(shí)數(shù)
x, y, z 通常是并列出現(xiàn)或代表浮點(diǎn)數(shù)
s, s1, s2, 通常代表字符串
c, ch 通常代表字符
f, file 通常代表文件
tmp, temp 通常代表臨時(shí)變量
ctr, cnt, cntr 一般代表計(jì)數(shù)器(如果i, j, k這些變量已被使用)
dummy, foo, bar 一般代表啞元變量
args 是main-method的主參數(shù)名

    縮排與換行

    每行長(zhǎng)度不得超過80字符。如果需要可以折行時(shí),也應(yīng)當(dāng)與上一行有共同的縮排距離。代碼應(yīng)如何交錯(cuò)、如何建立新行、在哪里建立允許、哪里不允許都有一些一般約定,縮排空格一般為2個(gè)或4個(gè)空格。

    條件表達(dá)式

    如果見到如下語(yǔ)法表達(dá)式:

代碼:

if (expr)          
 statement1;
else
 statement2;


    代碼行向右錯(cuò)排兩個(gè)空格如上所示。

    如果在一個(gè)表達(dá)式中有超過一條的聲明,則需要大括號(hào):

代碼:

if (expr){
  statement1;
  statement2;
} else{
  statement3;
  statement4;
}


   

轉(zhuǎn)帖于:軟件水平考試_考試吧
文章搜索
JAVA的編程風(fēng)格網(wǎng)友評(píng)論網(wǎng)友評(píng)論
版權(quán)聲明 --------------------------------------------------------------------------------------
    如果軟件水平考試網(wǎng)所轉(zhuǎn)載內(nèi)容不慎侵犯了您的權(quán)益,請(qǐng)與我們聯(lián)系,我們將會(huì)及時(shí)處理。如轉(zhuǎn)載本軟件水平考試網(wǎng)內(nèi)容,請(qǐng)注明出處。