首頁 考試吧論壇 Exam8視線 考試商城 網(wǎng)絡(luò)課程 面授課程 模擬考試 實用文檔 繽紛校園 英語學(xué)習(xí) | ||
![]() |
2010考研 | 自學(xué)考試 | 成人高考 | 專 升 本 | 法律碩士 | MBA/MPA | 中 科 院 | |
![]() |
四六級 | 商務(wù)英語 | 公共英語 | 職稱日語 | 職稱英語 | 博思 | 口譯筆譯 | GRE GMAT | 日語 | 托福 | |
雅思 | 專四專八 | 新概念 | 自考英語 | 零起點英、法、德、日、韓語 | 在職申碩英語 | ||
在職攻碩英語 | 成人英語三級 | ||
![]() |
等級考試 | 水平考試 | 微軟認(rèn)證 | 思科認(rèn)證 | Oracle認(rèn)證 | Linux認(rèn)證 | |
![]() |
公務(wù)員 | 報關(guān)員 | 報檢員 | 外銷員 | 司法考試 | 導(dǎo)游考試 | 教師資格 | 國際商務(wù)師 | 跟單員 | |
單證員 | 物流師 | 價格鑒證師 | 銀行從業(yè)資格 | 證券從業(yè)資格 | 人力資源管理師 | 管理咨詢師 | ||
期貨從業(yè)資格 | 社會工作者 | ||
![]() |
會計職稱 | 注會CPA | 經(jīng)濟(jì)師 | 統(tǒng)計師 | 注冊稅務(wù)師 | 評估師 | 精算師 | 高會 | ACCA | 審計師 | |
法律顧問 | 會計證 | ||
![]() |
建造師(一級、二級) | 造價師 | 監(jiān)理師 | 安全師 | 咨詢師 | 結(jié)構(gòu)師 | 建筑師 | 安全評價師 | |
估價師(房地產(chǎn)估價、土地估價) | 設(shè)備監(jiān)理師 | 巖土工程師 | 質(zhì)量資格 | 房地產(chǎn)經(jīng)紀(jì)人 | 造價員 | ||
投資項目管理 | 土地代理人 | 環(huán)保師 | 環(huán)境影響評價 | 物業(yè)管理師 | 城市規(guī)劃師 | 公路監(jiān)理師 | ||
公路造價工程師 | 招標(biāo)師 | ||
![]() |
執(zhí)業(yè)護(hù)士 | 執(zhí)業(yè)醫(yī)師 | 執(zhí)業(yè)藥師 | 衛(wèi)生資格 |
很久以來都在體會著JAVA的風(fēng)格,現(xiàn)在做一簡單陳述,希望大家多提寶貴意見。
對于一種好的編程語言,學(xué)習(xí)它的編程風(fēng)格是很重要的。每種語言都有自己的編寫和注釋約定,當(dāng)然所有語言都建立在最基本的約定之上。編程中最重要的并不是讓代碼按自己希望的方式運(yùn)行,而是程序中那種自明的編程風(fēng)格(這對于程序員的益處相信眾多程序員都身有體會)!但這還不夠,程序還應(yīng)該具有可讀、相對持久和可維護(hù)性?勺x性非常重要,因為你不希望自己以前的作品在之后的閱讀中給自己留下障礙,當(dāng)然,更重要的是自己的程序能讓其他程序員讀懂并且修改。
下面我把工作中所理解的java風(fēng)格做一簡單總結(jié),這是我所理解的好的編程風(fēng)格和應(yīng)用中我們應(yīng)當(dāng)如何使用java編寫自己的代碼的小Guide。這并不完全,希望大家?guī)臀谊懤m(xù)總結(jié)各自的經(jīng)驗。
一般性概述
好的編程風(fēng)格固然重要,但是你一定聽說過一些程序員的個人風(fēng)格。其實我們完全不必為那些所謂條條框框所累,但是作為原則是我們至少不能打破這些常規(guī)。我們應(yīng)該在保持自己風(fēng)格的同時盡量的把自己與編程潛原則靠攏。
可讀性很容易達(dá)到,比如,讓自己的代碼縮排排列、名字采用描述性但不要過長(短名應(yīng)僅僅用在非遠(yuǎn)程)、特殊名稱比如pi應(yīng)當(dāng)被定義為final類型。模塊性是編程需要注意的另一重點,把代碼劃分到類里,在類中把功能劃分到方法中,別讓一個類太大,否則在使用、修改和理解上都會造成不必要的麻煩,方法也一樣,如果一個方法長度超過50行,它產(chǎn)生錯誤的概率將接近100%,盡量把大方法劃分為小方法,編程中為避免重復(fù)編寫,還應(yīng)盡量調(diào)用JAVA標(biāo)準(zhǔn)類庫。
盡量避免在寫代碼和注釋時使用不同語言,經(jīng)常見到論壇有朋友詢問諸如在java中調(diào)用c、調(diào)用php、調(diào)用shell之類的問題,其實在編程中,我們應(yīng)盡量使用一種語言去完成事情。另外就是不必最優(yōu)化自己的代碼,應(yīng)該選擇相對較優(yōu)的算法就可以了。
類、方法和fields
類應(yīng)體現(xiàn)出某種物質(zhì)的基本概念,比如要編程實現(xiàn)“汽車”的組成,那么所有的汽車都可以用類Car實現(xiàn)。這個類應(yīng)當(dāng)包括域描述、屬性描述和car的狀態(tài)(color, number of doors, age等)和由car可完成的操作(getColor, setColor等)。為了提高類的可重用性,不要在類中有過多的描述,當(dāng)然這也會增加錯誤產(chǎn)生的機(jī)會。
類名首字母大寫,比如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) { ... } } |
注意類名和大括號間的空格!
方法
方法一般定義為public。當(dāng)然,如果方法僅僅在當(dāng)前類用到可以定義為private,而如果希望一個子類沿用這個方法則不同,這時候的方法應(yīng)定義為protected。
java中的方法定義很有趣,它們一般小寫字母開頭,如果有兩個字組成,第二個字的首字母則大寫。因此名字的描述性是至關(guān)重要的。這使你不用閱讀整篇代碼來判斷這是一個什么方法。在給自己的方法取名時應(yīng)盡量不要太短或者太長,另一個需要注意的是大多方法使用動詞(動賓短語)。
例如:
public void eat() {}
public void eatBananas() {}
Selector(選擇器)方法有g(shù)et前綴,后綴是它們將要get的,比如
public int getBananas() {}
Mutator(存取器)方法則有set前綴,后綴則是他們要set的,比如
public void setBananas(int amount) {}
注意mutators大多無返回值。
方法的參數(shù)應(yīng)當(dāng)以如下方式給出:
public void aMethod(type parameter1, type parameter2, ... , type parametern) {}
如果參數(shù)過長,也可以斷開為幾行,應(yīng)對齊向下排列如:
public void aMethod(type parameter1, type parameter2,... ,
type parametern, type parameter n+1,... ,
type parameterm, type parameter m+1) {}
另外要注意類的左束括號應(yīng)在方法的右束括號之后而非下一行:
代碼: |
public int aMethod() { int i = 0; if(i == 0) System.out.println("success!"); } |
為了文件可讀性好,還要注意語句最好寫在同一行,當(dāng)然一行寫不下是可以斷行的,比如行字母超過80。
fields
比如變量,如果不希望它永久有效,應(yīng)設(shè)為private。如果一個變量在類中不發(fā)生任何動作(比如數(shù)據(jù)結(jié)構(gòu)中的node)則可以設(shè)置為public,常量一般聲明為public。如果不能確定一個變量到底該聲明為什么,應(yīng)暫且聲明為private。
field的名字一般使用小寫字母,不要使用下橫線或其他特殊字符。 如果變量包含兩個字,那么第二個字的首字母大寫。比如:
int i, j, k;
Date date;
double myField;
常量一般全部大寫,也可以包含下橫線:
public static final int MAX_SIZE_OF_DATABASE
fields的名字通常為名詞。較重要的fields更應(yīng)具備描述性,比如程序中包含一個游戲的得分,那可以用score來代表。如果變量變化較頻繁,那使用一個單一字符來代表就ok了:
i, j, k 通常代表整數(shù)
r, t, u, v, w 通常代表實數(shù)
x, y, z 通常是并列出現(xiàn)或代表浮點數(shù)
s, s1, s2, 通常代表字符串
c, ch 通常代表字符
f, file 通常代表文件
tmp, temp 通常代表臨時變量
ctr, cnt, cntr 一般代表計數(shù)器(如果i, j, k這些變量已被使用)
dummy, foo, bar 一般代表啞元變量
args 是main-method的主參數(shù)名
縮排與換行
每行長度不得超過80字符。如果需要可以折行時,也應(yīng)當(dāng)與上一行有共同的縮排距離。代碼應(yīng)如何交錯、如何建立新行、在哪里建立允許、哪里不允許都有一些一般約定,縮排空格一般為2個或4個空格。
條件表達(dá)式
如果見到如下語法表達(dá)式:
代碼: |
if (expr) statement1; else statement2; |
代碼行向右錯排兩個空格如上所示。
如果在一個表達(dá)式中有超過一條的聲明,則需要大括號:
代碼: |
if (expr){ statement1; statement2; } else{ statement3; statement4; } |