新聞中心
java軟件開發(fā)的代碼規(guī)范
1、組織與風格
成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),寶清企業(yè)網(wǎng)站建設(shè),寶清品牌網(wǎng)站建設(shè),網(wǎng)站定制,寶清網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,寶清網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
(1).關(guān)鍵詞和操作符之間加適當?shù)目崭瘛?/p>
(2).相對獨立的程序塊與塊之間加空行
(3).較長的語句、表達式等要分成多行書寫。
(4).劃分出的新行要進行適應的縮進,使排版整齊,語句可讀。
(5).長表達式要在低優(yōu)先級操作符處劃分新行,操作符放在新行之首。
(6).循環(huán)、判斷等語句中若有較長的表達式或語句,則要進行適應的劃分。
(7).若函數(shù)或過程中的參數(shù)較長,則要進行適當?shù)膭澐帧?/p>
(8).不允許把多個短語句寫在一行中,即一行只寫一條語句。
(9).函數(shù)或過程的開始、結(jié)構(gòu)的定義及循環(huán)、判斷等語句中的代碼都要采用縮進風格。
注:如果大家有興趣可以到安安DIY創(chuàng)作室博客,有相關(guān)說明性的文章和解釋。
2、注解
Java 的語法與 C++ 及為相似,那么,你知道 Java 的注釋有幾種嗎?是兩種?
// 注釋一行
/* ...... */ 注釋若干行
不完全對,除了以上兩種之外,還有第三種,文檔注釋:
/** ...... */ 注釋若干行,并寫入 javadoc 文檔
注釋要簡單明了。
String userName = null; //用戶名
邊寫代碼邊注釋,修改代碼同時修改相應的注釋,以保證注釋與代碼的一致性。
在必要的地方注釋,注釋量要適中。注釋的內(nèi)容要清楚、明了,含義準確,防止注釋二義性。
保持注釋與其描述的代碼相鄰,即注釋的就近原則。
對代碼的注釋應放在其上方相鄰位置,不可放在下面。對數(shù)據(jù)結(jié)構(gòu)的注釋應放在其上方相鄰位置,不可放在下面;對結(jié)構(gòu)中的每個域的注釋應放在此域的右方;
同一結(jié)構(gòu)中不同域的注釋要對齊。
變量、常量的注釋應放在其上方相鄰位置或右方。
全局變量要有較詳細的注釋,包括對其功能、取值范圍、哪些函數(shù)或過程存取它以及存取時注意事項等的說明。
在每個源文件的頭部要有必要的注釋信息,包括:文件名;版本號;作者;生成日期;模塊功能描述(如功能、主要算法、內(nèi)部各部分之間的關(guān)系、該文件與其它文件關(guān)系等);主要函數(shù)或過程清單及本文件歷史修改記錄等。
/**
* Copy Right Information : Neusoft IIT
* Project : eTrain
* JDK version used : jdk1.3.1
* Comments : config path
* Version : 1.01
* Modification history :2003.5.1
* Sr Date Modified By Why What is modified
* 1. 2003.5.2 Kevin Gao new
**/
在每個函數(shù)或過程的前面要有必要的注釋信息,包括:函數(shù)或過程名稱;功能描述;輸入、輸出及返回值說明;調(diào)用關(guān)系及被調(diào)用關(guān)系說明等
/**
* Description :checkout 提款
* @param Hashtable cart info
* @param OrderBean order info
* @return String
*/
public String checkout(Hashtable htCart,
OrderBean orderBean)
throws Exception{
}
javadoc注釋標簽語法
@author 對類的說明 標明開發(fā)該類模塊的作者
@version 對類的說明 標明該類模塊的版本
@see 對類、屬性、方法的說明 參考轉(zhuǎn)向,也就是相關(guān)主題
@param 對方法的說明 對方法中某參數(shù)的說明
@return 對方法的說明 對方法返回值的說明
@exception 對方法的說明 對方法可能拋出的異常進行說明
3、命名規(guī)范
定義這個規(guī)范的目的是讓項目中所有的文檔都看起來像一個人寫的,增加可讀性,減少項目組中因為換人而帶來的損失。(這些規(guī)范并不是一定要絕對遵守,但是一定要讓程序有良好的可讀性)較短的單詞可通過去掉元音形成縮寫;要不然最后自己寫的代碼自己都看不懂了,那可不行。
較長的單詞可取單詞的頭幾發(fā)符的優(yōu)先級,并用括號明確表達式的操作順序,避免使用默認優(yōu)先級。
使用匈牙利表示法
Package 的命名
Package 的名字應該都是由一個小寫單詞組成。
package com.neu.util
Class 的命名
Class 的名字必須由大寫字母開頭而其他字母都小寫的單詞組成,對于所有標識符,其中包含的所有單詞都應緊靠在一起,而且大寫中間單詞的首字母。
public class ThisAClassName{}
Class 變量的命名
變量的名字必須用一個小寫字母開頭。后面的單詞用大寫字母開頭
userName , thisAClassMethod
Static Final 變量的命名
static Final 變量的名字應該都大寫,并且指出完整含義。
/**
*DBConfig PATH
**/
public static final String
DB_CONFIG_FILE_PATH =com.neu.etrain.dbconfig;
參數(shù)的命名
參數(shù)的名字必須和變量的命名規(guī)范一致。
數(shù)組的命名
數(shù)組應該總是用下面的方式來命名:
byte[] buffer;
而不是:
byte buffer[];
方法的參數(shù)
使用有意義的參數(shù)命名,如果可能的話,使用和要賦值的字段一樣的名字:
SetCounter(int size){
this.size = size;
}
4、文件樣式
所有的 Java(*.java) 文件都必須遵守如下的樣式規(guī)則:
版權(quán)信息
版權(quán)信息必須在 java 文件的開頭,比如:
/*
* Copyright ? 2000 Shanghai XXX Co. Ltd.
* All right reserved.
*/
其他不需要出現(xiàn)在 javadoc 的信息也可以包含在這里。
Package/Imports
package 行要在 import 行之前,import 中標準的包名要在本地的包名之前,而且按照字母
順序排列。如果 import 行中包含了同一個包中的不同子目錄,則應該用 * 來處理。
package hotlava.net.stats;
import java io.*;
import java.util.Observable;
import hotlava.util.Application;
這里 java。io.* 使用來代替InputStream and OutputStream 的。
Class
接下來的是類的注釋,一般是用來解釋類的。
/**
* A class representing a set of packet and byte counters
* It is observable to allow it to be watched, but only
* reports changes when the current set is complete
*/
接下來是類定義,包含了在不同的行的 extends 和 implements
public class CounterSet
extends Observable
implements Cloneable
Class Fields
接下來是類的成員變量:
/**
* Packet counters
*/
protected int[] packets;
public 的成員變量必須生成文檔(JavaDoc)。proceted、private和 package 定義的成
員變量如果名字含義明確的話,可以沒有注釋。
存取方法
接下來是類變量的存取的方法。它只是簡單的用來將類的變量賦值獲取值的話,可以簡單的
寫在一行上。
/**
* Get the counters
* @return an array containing the statistical data. This array has been
* freshly allocated and can be modified by the caller.
*/
public int[] getPackets() { return copyArray(packets, offset); }
public int[] getBytes() { return copyArray(bytes, offset); }
public int[] getPackets() { return packets; }
public void setPackets(int[] packets) { this.packets = packets; }
其它的方法不要寫在一行上
構(gòu)造函數(shù)
接下來是構(gòu)造函數(shù),它應該用遞增的方式寫(比如:參數(shù)多的寫在后面)。
訪問類型 (public, private 等.) 和 任何 static, final 或 synchronized 應該在一行
中,并且方法和參數(shù)另寫一行,這樣可以使方法和參數(shù)更易讀。
public
CounterSet(int size){
this.size = size;
}
克隆方法
如果這個類是可以被克隆的,那么下一步就是 clone 方法:
public
Object clone() {
try {
CounterSet obj = (CounterSet)super.clone();
obj.packets = (int[])packets.clone();
obj.size = size;
return obj;
}catch(CloneNotSupportedException e) {
throw new InternalError(Unexpected CloneNotSUpportedException: +
e.getMessage());
}
}
類方法
下面開始寫類的方法:
/**
* Set the packet counters
* (such as when restoring from a database)
*/
protected final
void setArray(int[] r1, int[] r2, int[] r3, int[] r4)
throws IllegalArgumentException
{
//
// Ensure the arrays are of equal size
//
if (r1.length != r2.length || r1.length != r3.length || r1.length != r4.length)
throw new IllegalArgumentException(Arrays must be of the same size);
System.arraycopy(r1, 0, r3, 0, r1.length);
System.arraycopy(r2, 0, r4, 0, r1.length);
}
toString 方法
無論如何,每一個類都應該定義 toString 方法:
public
String toString() {
String retval = CounterSet: ;
for (int i = 0; i data.length(); i++) {
retval += data.bytes.toString();
retval += data.packets.toString();
}
return retval;
}
}
main 方法
如果main(String[]) 方法已經(jīng)定義了, 那么它應該寫在類的底部.
5、代碼可讀性
避免使用不易理解的數(shù)字,用有意義的標識來替代。
不要使用難懂的技巧性很高的語句。
源程序中關(guān)系較為緊密的代碼應盡可能相鄰。
6、代碼性能
在寫代碼的時候,從頭至尾都應該考慮性能問題。這不是說時間都應該浪費在優(yōu)化代碼上,而是我們時刻應該提醒自己要注意代碼的效率。比如:如果沒有時間來實現(xiàn)一個高效的算法,那么我們應該在文檔中記錄下來,以便在以后有空的時候再來實現(xiàn)她。
不是所有的人都同意在寫代碼的時候應該優(yōu)化性能這個觀點的,他們認為性能優(yōu)化的問題應該在項目的后期再去考慮,也就是在程序的輪廓已經(jīng)實現(xiàn)了以后。
不必要的對象構(gòu)造
不要在循環(huán)中構(gòu)造和釋放對象
使用 StringBuffer 對象
在處理 String 的時候要盡量使用 StringBuffer 類,StringBuffer 類是構(gòu)成 String 類的基礎(chǔ)。
String 類將 StringBuffer 類封裝了起來,(以花費更多時間為代價)為開發(fā)人員提供了一個安全的接口。當我們在構(gòu)造字符串的時候,我們應該用 StringBuffer 來實現(xiàn)大部分的工作,當工作完成后將 StringBuffer 對象再轉(zhuǎn)換為需要的 String 對象。比如:如果有一個字符串必須不斷地在其后添加許多字符來完成構(gòu)造,那么我們應該使用StringBuffer 對象和她的 append() 方法。如果我們用 String 對象代替StringBuffer 對象的話,會花費許多不必要的創(chuàng)建和釋放對象的 CPU 時間。大家可以來安安DIY創(chuàng)作室一起討論。
避免太多的使用 synchronized 關(guān)鍵字避免不必要的使用關(guān)鍵字 synchronized,應該在必要的時候再使用她,這是一個避免死鎖的好方法。
7、編程技巧
byte 數(shù)組轉(zhuǎn)換到 characters
為了將 byte 數(shù)組轉(zhuǎn)換到 characters,你可以這么做:
Hello world!.getBytes();
Utility 類
Utility 類(僅僅提供方法的類)應該被申明為抽象的來防止被繼承或被初始化。
初始化
下面的代碼是一種很好的初始化數(shù)組的方法:
objectArguments = new Object[] { arguments };
枚舉類型
JAVA 對枚舉的支持不好,但是下面的代碼是一種很有用的模板:
class Colour {
public static final Colour BLACK = new Colour(0, 0, 0);
public static final Colour RED = new Colour(0xFF, 0, 0);
public static final Colour GREEN = new Colour(0, 0xFF, 0);
public static final Colour BLUE = new Colour(0, 0, 0xFF);
public static final Colour WHITE = new Colour(0xFF, 0xFF, 0xFF);
}
這種技術(shù)實現(xiàn)了RED, GREEN, BLUE 等可以象其他語言的枚舉類型一樣使用的常量。
他們可以用 '==' 操作符來比較。
但是這樣使用有一個缺陷:如果一個用戶用這樣的方法來創(chuàng)建顏色 BLACK new Colour(0,0,0)
那么這就是另外一個對象,'=='操作符就會產(chǎn)生錯誤。她的 equal() 方法仍然有效。由于這個原因,這個技術(shù)的缺陷最好注明在文檔中,或者只在自己的包中使用。
8、編寫格式
代碼樣式
代碼應該用 unix 的格式,而不是 windows 的(比如:回車變成回車+換行)
文檔化
必須用 javadoc 來為類生成文檔。不僅因為它是標準,這也是被各種 java 編譯器都認可的方法。使用 @author 標記是不被推薦的,因為代碼不應該是被個人擁有的。
縮進
縮進應該是每行2個空格. 不要在源文件中保存Tab字符. 在使用不同的源代碼管理工具時Tab字符將因為用戶設(shè)置的不同而擴展為不同的寬度.如果你使用 UltrEdit 作為你的 Java 源代碼編輯器的話,你可以通過如下操作來禁止保存Tab字符, 方法是通過 UltrEdit中先設(shè)定 Tab 使用的長度室2個空格,然后用 Format|Tabs to Spaces 菜單將 Tab 轉(zhuǎn)換為空格。
頁寬
頁寬應該設(shè)置為80字符. 源代碼一般不會超過這個寬度, 并導致無法完整顯示, 但這一設(shè)置也可以靈活調(diào)整. 在任何情況下, 超長的語句應該在一個逗號或者一個操作符后折行. 一條語句折行后, 應該比原來的語句再縮進2個字符.
{} 對
{} 中的語句應該單獨作為一行. 例如, 下面的第1行是錯誤的, 第2行是正確的:
if (i0) { i ++ }; // 錯誤, { 和 } 在同一行
if (i0) {
i ++
}; // 正確, { 單獨作為一行
} 語句永遠單獨作為一行.如果 } 語句應該縮進到與其相對應的 { 那一行相對齊的位置。
括號
左括號和后一個字符之間不應該出現(xiàn)空格, 同樣, 右括號和前一個字符之間也不應該出現(xiàn)空格. 下面的例子說明括號和空格的錯誤及正確使用:
CallProc( AParameter ); // 錯誤
CallProc(AParameter); // 正確
不要在語句中使用無意義的括號. 括號只應該為達到某種目的而出現(xiàn)在源代碼中。下面的例子說明錯誤和正確的用法:
if ((I) = 42) { // 錯誤 - 括號毫無意義
if (I == 42) or (J == 42) then // 正確 - 的確需要括號
9、代碼編譯
1.編寫代碼時要注意隨時保存,并定期備份,防止由于斷電、硬盤損壞等原因造成代碼丟失。
2.同一項目組內(nèi),最好使用相同的編輯器,并使用相同的設(shè)置選項。
3.合理地設(shè)計軟件系統(tǒng)目錄,方便開發(fā)人員使用。
4.打開編譯器的所有告警開關(guān)對程序進行編譯。
5.在同一項目組或產(chǎn)品組中,要統(tǒng)一編譯開關(guān)選項。
6.使用工具軟件(如Visual SourceSafe)對代碼版本進行維護。如果大家有不明白的可以到安安DIY創(chuàng)作室留言。
10、可移植性
Borland Jbulider 不喜歡 synchronized 這個關(guān)鍵字,如果你的斷點設(shè)在這些關(guān)鍵字的作用域內(nèi)的話,調(diào)試的時候你會發(fā)現(xiàn)的斷點會到處亂跳,讓你不知所措。除非必須,盡量不要使用。
換行
如果需要換行的話,盡量用 println 來代替在字符串中使用\n。
你不要這樣:
System.out.print(Hello,world!\n);
要這樣:
System.out.println(Hello,world!);
或者你構(gòu)造一個帶換行符的字符串,至少要象這樣:
String newline = System.getProperty(line.separator);
System.out.println(Hello world + newline);
PrintStream
PrintStream 已經(jīng)被不贊成(deprecated)使用,用 PrintWrite 來代替它。
java編碼規(guī)范有哪些?
JAVA代碼規(guī)范:
(1) 類名首字母應該大寫。字段、方法以及對象(句柄)的首字母應小寫。對于所有標識符,其中包含的所有單詞都應緊靠在一起,而且大寫中間單詞的首字母。例如:
ThisIsAClassName
thisIsMethodOrFieldName
若在定義中出現(xiàn)了常數(shù)初始化字符,則大寫static final基本類型標識符中的所有字母。這樣便可標志出它們屬于編譯期的常數(shù)。
Java包(Package)屬于一種特殊情況:它們?nèi)际切懽帜福幢阒虚g的單詞亦是如此。對于域名擴展名稱,如com,org,net或者edu等,全部都應小寫(這也是Java 1.1和Java 1.2的區(qū)別之一)。
(2) 為了常規(guī)用途而創(chuàng)建一個類時,請采取"經(jīng)典形式",并包含對下述元素的定義:
equals()
hashCode()
toString()
clone()(implement Cloneable)
implement Serializable
(3) 對于自己創(chuàng)建的每一個類,都考慮置入一個main(),其中包含了用于測試那個類的代碼。為使用一個項目中的類,我們沒必要刪除測試代碼。若進行了任何形式的改動,可方便地返回測試。這些代碼也可作為如何使用類的一個示例使用。
(4) 應將方法設(shè)計成簡要的、功能性單元,用它描述和實現(xiàn)一個不連續(xù)的類接口部分。理想情況下,方法應簡明扼要。若長度很大,可考慮通過某種方式將其分割成較短的幾個方法。這樣做也便于類內(nèi)代碼的重復使用(有些時候,方法必須非常大,但它們?nèi)詰蛔鐾瑯拥囊患虑椋?/p>
(5) 設(shè)計一個類時,請設(shè)身處地為客戶程序員考慮一下(類的使用方法應該是非常明確的)。然后,再設(shè)身處地為管理代碼的人考慮一下(預計有可能進行哪些形式的修改,想想用什么方法可把它們變得更簡單)。
(6) 使類盡可能短小精悍,而且只解決一個特定的問題。下面是對類設(shè)計的一些建議:
■一個復雜的開關(guān)語句:考慮采用"多形"機制
■數(shù)量眾多的方法涉及到類型差別極大的操作:考慮用幾個類來分別實現(xiàn)
■許多成員變量在特征上有很大的差別:考慮使用幾個類
(7) 讓一切東西都盡可能地"私有"--private。可使庫的某一部分"公共化"(一個方法、類或者一個字段等等),就永遠不能把它拿出。若強行拿出,就可能破壞其他人現(xiàn)有的代碼,使他們不得不重新編寫和設(shè)計。若只公布自己必須公布的,就可放心大膽地改變其他任何東西。在多線程環(huán)境中,隱私是特別重要的一個因素--只有private字段才能在非同步使用的情況下受到保護。
(8) 謹惕"巨大對象綜合癥"。對一些習慣于順序編程思維、且初涉OOP領(lǐng)域的新手,往往喜歡先寫一個順序執(zhí)行的程序,再把它嵌入一個或兩個巨大的對象里。根據(jù)編程原理,對象表達的應該是應用程序的概念,而非應用程序本身。
(9) 若不得已進行一些不太雅觀的編程,至少應該把那些代碼置于一個類的內(nèi)部。
(10) 任何時候只要發(fā)現(xiàn)類與類之間結(jié)合得非常緊密,就需要考慮是否采用內(nèi)部類,從而改善編碼及維護工作(參見第14章14.1.2小節(jié)的"用內(nèi)部類改進代碼")。
(11) 盡可能細致地加上注釋,并用javadoc注釋文檔語法生成自己的程序文檔。
(12) 避免使用"魔術(shù)數(shù)字",這些數(shù)字很難與代碼很好地配合。如以后需要修改它,無疑會成為一場噩夢,因為根本不知道"100"到底是指"數(shù)組大小"還是"其他全然不同的東西"。所以,我們應創(chuàng)建一個常數(shù),并為其使用具有說服力的描述性名稱,并在整個程序中都采用常數(shù)標識符。這樣可使程序更易理解以及更易維護。
(13) 涉及構(gòu)建器和異常的時候,通常希望重新丟棄在構(gòu)建器中捕獲的任何異常--如果它造成了那個對象的創(chuàng)建失敗。這樣一來,調(diào)用者就不會以為那個對象已正確地創(chuàng)建,從而盲目地繼續(xù)。
(14) 當客戶程序員用完對象以后,若你的類要求進行任何清除工作,可考慮將清除代碼置于一個良好定義的方法里,采用類似于cleanup()這樣的名字,明確表明自己的用途。除此以外,可在類內(nèi)放置一個boolean(布爾)標記,指出對象是否已被清除。在類的finalize()方法里,請確定對象已被清除,并已丟棄了從RuntimeException繼承的一個類(如果還沒有的話),從而指出一個編程錯誤。在采取象這樣的方案之前,請確定finalize()能夠在自己的系統(tǒng)中工作(可能需要調(diào)用System.runFinalizersOnExit(true),從而確保這一行為)。
(15) 在一個特定的作用域內(nèi),若一個對象必須清除(非由垃圾收集機制處理),請采用下述方法:初始化對象;若成功,則立即進入一個含有finally從句的try塊,開始清除工作。
(16) 若在初始化過程中需要覆蓋(取消)finalize(),請記住調(diào)用super.finalize()(若Object屬于我們的直接超類,則無此必要)。在對finalize()進行覆蓋的過程中,對super.finalize()的調(diào)用應屬于最后一個行動,而不應是第一個行動,這樣可確保在需要基礎(chǔ)類組件的時候它們依然有效。
(17) 創(chuàng)建大小固定的對象集合時,請將它們傳輸至一個數(shù)組(若準備從一個方法里返回這個集合,更應如此操作)。這樣一來,我們就可享受到數(shù)組在編譯期進行類型檢查的好處。此外,為使用它們,數(shù)組的接收者也許并不需要將對象"造型"到數(shù)組里。
(18) 盡量使用interfaces,不要使用abstract類。若已知某樣東西準備成為一個基礎(chǔ)類,那么第一個選擇應是將其變成一個interface(接口)。只有在不得不使用方法定義或者成員變量的時候,才需要將其變成一個abstract(抽象)類。接口主要描述了客戶希望做什么事情,而一個類則致力于(或允許)具體的實施細節(jié)。
(19) 在構(gòu)建器內(nèi)部,只進行那些將對象設(shè)為正確狀態(tài)所需的工作。盡可能地避免調(diào)用其他方法,因為那些方法可能被其他人覆蓋或取消,從而在構(gòu)建過程中產(chǎn)生不可預知的結(jié)果(參見第7章的詳細說明)。
(20) 對象不應只是簡單地容納一些數(shù)據(jù);它們的行為也應得到良好的定義。
(21) 在現(xiàn)成類的基礎(chǔ)上創(chuàng)建新類時,請首先選擇"新建"或"創(chuàng)作"。只有自己的設(shè)計要求必須繼承時,才應考慮這方面的問題。若在本來允許新建的場合使用了繼承,則整個設(shè)計會變得沒有必要地復雜。
(22) 用繼承及方法覆蓋來表示行為間的差異,而用字段表示狀態(tài)間的區(qū)別。一個非常極端的例子是通過對不同類的繼承來表示顏色,這是絕對應該避免的:應直接使用一個"顏色"字段。
(23) 為避免編程時遇到麻煩,請保證在自己類路徑指到的任何地方,每個名字都僅對應一個類。否則,編譯器可能先找到同名的另一個類,并報告出錯消息。若懷疑自己碰到了類路徑問題,請試試在類路徑的每一個起點,搜索一下同名的.class文件。
(24) 在Java 1.1 AWT中使用事件"適配器"時,特別容易碰到一個陷阱。若覆蓋了某個適配器方法,同時拼寫方法沒有特別講究,最后的結(jié)果就是新添加一個方法,而不是覆蓋現(xiàn)成方法。然而,由于這樣做是完全合法的,所以不會從編譯器或運行期系統(tǒng)獲得任何出錯提示--只不過代碼的工作就變得不正常了。
(25) 用合理的設(shè)計方案消除"偽功能"。也就是說,假若只需要創(chuàng)建類的一個對象,就不要提前限制自己使用應用程序,并加上一條"只生成其中一個"注釋。請考慮將其封裝成一個"獨生子"的形式。若在主程序里有大量散亂的代碼,用于創(chuàng)建自己的對象,請考慮采納一種創(chuàng)造性的方案,將些代碼封裝起來。
(26) 警惕"分析癱瘓"。請記住,無論如何都要提前了解整個項目的狀況,再去考察其中的細節(jié)。由于把握了全局,可快速認識自己未知的一些因素,防止在考察細節(jié)的時候陷入"死邏輯"中。
(27) 警惕"過早優(yōu)化"。首先讓它運行起來,再考慮變得更快--但只有在自己必須這樣做、而且經(jīng)證實在某部分代碼中的確存在一個性能瓶頸的時候,才應進行優(yōu)化。除非用專門的工具分析瓶頸,否則很有可能是在浪費自己的時間。性能提升的隱含代價是自己的代碼變得難于理解,而且難于維護。
(28) 請記住,閱讀代碼的時間比寫代碼的時間多得多。思路清晰的設(shè)計可獲得易于理解的程序,但注釋、細致的解釋以及一些示例往往具有不可估量的價值。無論對你自己,還是對后來的人,它們都是相當重要的。如對此仍有懷疑,那么請試想自己試圖從聯(lián)機Java文檔里找出有用信息時碰到的挫折,這樣或許能將你說服。
(29) 如認為自己已進行了良好的分析、設(shè)計或者實施,那么請稍微更換一下思維角度。試試邀請一些外來人士--并不一定是專家,但可以是來自本公司其他部門的人。請他們用完全新鮮的眼光考察你的工作,看看是否能找出你一度熟視無睹的問題。采取這種方式,往往能在最適合修改的階段找出一些關(guān)鍵性的問題,避免產(chǎn)品發(fā)行后再解決問題而造成的金錢及精力方面的損失。
(30) 良好的設(shè)計能帶來最大的回報。簡言之,對于一個特定的問題,通常會花較長的時間才能找到一種最恰當?shù)慕鉀Q方案。但一旦找到了正確的方法,以后的工作就輕松多了,再也不用經(jīng)歷數(shù)小時、數(shù)天或者數(shù)月的痛苦掙扎。我們的努力工作會帶來最大的回報(甚至無可估量)。而且由于自己傾注了大量心血,最終獲得一個出色的設(shè)計方案,成功的快感也是令人心動的。堅持****草草完工的誘惑--那樣做往往得不償失
java程序員有哪些應該注意的編碼規(guī)范?
Java編碼規(guī)范: 盡量使用完整的英文描述符采用適用于相關(guān)領(lǐng)域的術(shù)語采用大小寫混合使名字可讀盡量少用縮寫,但如果用了,必須符合整個工程中的統(tǒng)一定義避免使用長的名字(小于15個字母為正常選擇)避免使用類似的名字,或者僅僅是大小寫不同的名字避免使用下劃線(除靜態(tài)常量等)標識符類型說明包(Package)的命名Package的名字應該采用完整的英文描述符,都是由一個小寫單詞組成。并且包名的前綴總是一個頂級域名
,通常是com、edu、gov、mil、net、org等;如:com.yjhmily.test類(Class)的命名類名應該是個一名詞,采用大小寫混合的方式,每個單詞的首字母大寫。盡量保證類名簡潔而富于描述。
java編程規(guī)范!!!
名稱 Java語言編碼規(guī)范(Java Code Conventions)
簡介 本文檔講述了Java語言的編碼規(guī)范,較之陳世忠先生《c++編碼規(guī)范》的浩繁詳盡,此文當屬短小精悍了。而其中所列之各項條款,從編碼風格,到注意事項,不單只Java,對于其他語言,也都很有借鑒意義。因為簡短,所以易記,大家不妨將此作為handbook,常備案頭,逐一對驗。
1 介紹
1.1 為什么要有編碼規(guī)范
1.2 版權(quán)聲明
2 文件名
2.1 文件后綴
2.2 常用文件名
3 文件組織
3.1 Java源文件
3.1.1 開頭注釋
3.1.2 包和引入語句
3.1.3 類和接口聲明
4 縮進排版
4.1 行長度
4.2 換行
5 注釋
5.1 實現(xiàn)注釋的格式
5.1.1 塊注釋
5.1.2 單行注釋
5.1.3 尾端注釋
5.1.4 行末注釋
5.2 文擋注釋
6 聲明
6.1 每行聲明變量的數(shù)量
6.2 初始化
6.3 布局
6.4 類和接口的聲明
7 語句
7.1 簡單語句
7.2 復合語句
7.3 返回語句
7.4 if,if-else,if else-if else語句
7.5 for語句
7.6 while語句
7.7 do-while語句
7.8 switch語句
7.9 try-catch語句
8 空白
8.1 空行
8.2 空格
9 命名規(guī)范
10 編程慣例
10.1 提供對實例以及類變量的訪問控制
10.2 引用類變量和類方法
10.3 常量
10.4 變量賦值
10.5 其它慣例
10.5.1 圓括號
10.5.2 返回值
10.5.3 條件運算符"?"前的表達式"?"前的表達式
10.5.4 特殊注釋
11 代碼范例
11.1 Java源文件范例
1 介紹(Introduction)
1.1 為什么要有編碼規(guī)范(Why Have Code Conventions)
編碼規(guī)范對于程序員而言尤為重要,有以下幾個原因:
- 一個軟件的生命周期中,80%的花費在于維護
- 幾乎沒有任何一個軟件,在其整個生命周期中,均由最初的開發(fā)人員來維護
- 編碼規(guī)范可以改善軟件的可讀性,可以讓程序員盡快而徹底地理解新的代碼
- 如果你將源碼作為產(chǎn)品發(fā)布,就需要確任它是否被很好的打包并且清晰無誤,一如你已構(gòu)建的其它任何產(chǎn)品
為了執(zhí)行規(guī)范,每個軟件開發(fā)人員必須一致遵守編碼規(guī)范。每個人。
1.2 版權(quán)聲明(Acknowledgments)
本文檔反映的是Sun MicroSystems公司,Java語言規(guī)范中的編碼標準部分。主要貢獻者包括:Peter King,Patrick Naughton,Mike DeMoney,Jonni Kanerva,Kathy Walrath以及Scott Hommel。
本文檔現(xiàn)由Scott Hommel維護,有關(guān)評論意見請發(fā)至shommel@eng.sun.com
2 文件名(File Names)
這部分列出了常用的文件名及其后綴。
2.1 文件后綴(File Suffixes)
Java程序使用下列文件后綴:
文件類別 文件后綴
Java源文件 .java
Java字節(jié)碼文件 .class
2.2 常用文件名(Common File Names)
常用的文件名包括:
文件名 用途
GNUmakefile makefiles的首選文件名。我們采用gnumake來創(chuàng)建(build)軟件。
README 概述特定目錄下所含內(nèi)容的文件的首選文件名
3 文件組織(File Organization)
一個文件由被空行分割而成的段落以及標識每個段落的可選注釋共同組成。超過2000行的程序難以閱讀,應該盡量避免。"Java源文件范例"提供了一個布局合理的Java程序范例。
3.1 Java源文件(Java Source Files)
每個Java源文件都包含一個單一的公共類或接口。若私有類和接口與一個公共類相關(guān)聯(lián),可以將它們和公共類放入同一個源文件。公共類必須是這個文件中的第一個類或接口。
Java源文件還遵循以下規(guī)則:
- 開頭注釋(參見"開頭注釋")
- 包和引入語句(參見"包和引入語句")
- 類和接口聲明(參見"類和接口聲明")
3.1.1 開頭注釋(Beginning Comments)
所有的源文件都應該在開頭有一個C語言風格的注釋,其中列出類名、版本信息、日期和版權(quán)聲明:
/*
* Classname
*
* Version information
*
* Date
*
* Copyright notice
*/
3.1.2 包和引入語句(Package and Import Statements)
在多數(shù)Java源文件中,第一個非注釋行是包語句。在它之后可以跟引入語句。例如:
package java.awt;
import java.awt.peer.CanvasPeer;
3.1.3 類和接口聲明(Class and Interface Declarations)
下表描述了類和接口聲明的各個部分以及它們出現(xiàn)的先后次序。參見"Java源文件范例"中一個包含注釋的例子。
類/接口聲明的各部分 注解
1 類/接口文檔注釋(/**……*/) 該注釋中所需包含的信息,參見"文檔注釋"
2 類或接口的聲明
3 類/接口實現(xiàn)的注釋(/*……*/)如果有必要的話 該注釋應包含任何有關(guān)整個類或接口的信息,而這些信息又不適合作為類/接口文檔注釋。
4 類的(靜態(tài))變量 首先是類的公共變量,隨后是保護變量,再后是包一級別的變量(沒有訪問修飾符,access modifier),最后是私有變量。
5 實例變量 首先是公共級別的,隨后是保護級別的,再后是包一級別的(沒有訪問修飾符),最后是私有級別的。
6 構(gòu)造器
7 方法 這些方法應該按功能,而非作用域或訪問權(quán)限,分組。例如,一個私有的類方法可以置于兩個公有的實例方法之間。其目的是為了更便于閱讀和理解代碼。
4 縮進排版(Indentation)
4個空格常被作為縮進排版的一個單位。縮進的確切解釋并未詳細指定(空格 vs. 制表符)。一個制表符等于8個空格(而非4個)。
4.1 行長度(Line Length)
盡量避免一行的長度超過80個字符,因為很多終端和工具不能很好處理之。
注意:用于文檔中的例子應該使用更短的行長,長度一般不超過70個字符。
4.2 換行(Wrapping Lines)
當一個表達式無法容納在一行內(nèi)時,可以依據(jù)如下一般規(guī)則斷開之:
- 在一個逗號后面斷開
- 在一個操作符前面斷開
- 寧可選擇較高級別(higher-level)的斷開,而非較低級別(lower-level)的斷開
- 新的一行應該與上一行同一級別表達式的開頭處對齊
- 如果以上規(guī)則導致你的代碼混亂或者使你的代碼都堆擠在右邊,那就代之以縮進8個空格。
以下是斷開方法調(diào)用的一些例子:
someMethod(longExpression1, longExpression2, longExpression3,
longExpression4, longExpression5);
var = someMethod1(longExpression1,
someMethod2(longExpression2,
longExpression3));
以下是兩個斷開算術(shù)表達式的例子。前者更好,因為斷開處位于括號表達式的外邊,這是個較高級別的斷開。
longName1 = longName2 * (longName3 + longName4 - longName5)
+ 4 * longname6; //PREFFER
longName1 = longName2 * (longName3 + longName4
- longName5) + 4 * longname6; //AVOID
以下是兩個縮進方法聲明的例子。前者是常規(guī)情形。后者若使用常規(guī)的縮進方式將會使第二行和第三行移得很靠右,所以代之以縮進8個空格
//CONVENTIONAL INDENTATION
someMethod(int anArg, Object anotherArg, String yetAnotherArg,
Object andStillAnother) {
...
}
//INDENT 8 SPACES TO AVOID VERY DEEP INDENTS
private static synchronized horkingLongMethodName(int anArg,
Object anotherArg, String yetAnotherArg,
Object andStillAnother) {
...
}
if語句的換行通常使用8個空格的規(guī)則,因為常規(guī)縮進(4個空格)會使語句體看起來比較費勁。比如:
//DON’T USE THIS INDENTATION
if ((condition1 condition2)
|| (condition3 condition4)
||!(condition5 condition6)) { //BAD WRAPS
doSomethingAboutIt(); //MAKE THIS LINE EASY TO MISS
}
//USE THIS INDENTATION INSTEAD
if ((condition1 condition2)
|| (condition3 condition4)
||!(condition5 condition6)) {
doSomethingAboutIt();
}
//OR USE THIS
if ((condition1 condition2) || (condition3 condition4)
||!(condition5 condition6)) {
doSomethingAboutIt();
}
這里有三種可行的方法用于處理三元運算表達式:
alpha = (aLongBooleanExpression) ? beta : gamma;
alpha = (aLongBooleanExpression) ? beta
: gamma;
alpha = (aLongBooleanExpression)
? beta
: gamma;
5 注釋(Comments)
Java程序有兩類注釋:實現(xiàn)注釋(implementation comments)和文檔注釋(document comments)。實現(xiàn)注釋是那些在C++中見過的,使用/*...*/和//界定的注釋。文檔注釋(被稱為"doc comments")是Java獨有的,并由/**...*/界定。文檔注釋可以通過javadoc工具轉(zhuǎn)換成HTML文件。
實現(xiàn)注釋用以注釋代碼或者實現(xiàn)細節(jié)。文檔注釋從實現(xiàn)自由(implementation-free)的角度描述代碼的規(guī)范。它可以被那些手頭沒有源碼的開發(fā)人員讀懂。
注釋應被用來給出代碼的總括,并提供代碼自身沒有提供的附加信息。注釋應該僅包含與閱讀和理解程序有關(guān)的信息。例如,相應的包如何被建立或位于哪個目錄下之類的信息不應包括在注釋中。
在注釋里,對設(shè)計決策中重要的或者不是顯而易見的地方進行說明是可以的,但應避免提供代碼中己清晰表達出來的重復信息。多余的的注釋很容易過時。通常應避免那些代碼更新就可能過時的注釋。
注意:頻繁的注釋有時反映出代碼的低質(zhì)量。當你覺得被迫要加注釋的時候,考慮一下重寫代碼使其更清晰。
注釋不應寫在用星號或其他字符畫出來的大框里。注釋不應包括諸如制表符和回退符之類的特殊字符。
5.1 實現(xiàn)注釋的格式(Implementation Comment Formats)
程序可以有4種實現(xiàn)注釋的風格:塊(block)、單行(single-line)、尾端(trailing)和行末(end-of-line)。
5.1.1 塊注釋(Block Comments)
塊注釋通常用于提供對文件,方法,數(shù)據(jù)結(jié)構(gòu)和算法的描述。塊注釋被置于每個文件的開始處以及每個方法之前。它們也可以被用于其他地方,比如方法內(nèi)部。在功能和方法內(nèi)部的塊注釋應該和它們所描述的代碼具有一樣的縮進格式。
塊注釋之首應該有一個空行,用于把塊注釋和代碼分割開來,比如:
/*
* Here is a block comment.
*/
塊注釋可以以/*-開頭,這樣indent(1)就可以將之識別為一個代碼塊的開始,而不會重排它。
/*-
* Here is a block comment with some very special
* formatting that I want indent(1) to ignore.
*
* one
* two
* three
*/
注意:如果你不使用indent(1),就不必在代碼中使用/*-,或為他人可能對你的代碼運行indent(1)作讓步。
參見"文檔注釋"
5.1.2 單行注釋(Single-Line Comments)
短注釋可以顯示在一行內(nèi),并與其后的代碼具有一樣的縮進層級。如果一個注釋不能在一行內(nèi)寫完,就該采用塊注釋(參見"塊注釋")。單行注釋之前應該有一個空行。以下是一個Java代碼中單行注釋的例子:
if (condition) {
/* Handle the condition. */
...
}
5.1.3 尾端注釋(Trailing Comments)
極短的注釋可以與它們所要描述的代碼位于同一行,但是應該有足夠的空白來分開代碼和注釋。若有多個短注釋出現(xiàn)于大段代碼中,它們應該具有相同的縮進。
以下是一個Java代碼中尾端注釋的例子:
if (a == 2) {
return TRUE; /* special case */
} else {
return isPrime(a); /* works only for odd a */
}
5.1.4 行末注釋(End-Of-Line Comments)
注釋界定符"http://",可以注釋掉整行或者一行中的一部分。它一般不用于連續(xù)多行的注釋文本;然而,它可以用來注釋掉連續(xù)多行的代碼段。以下是所有三種風格的例子:
if (foo 1) {
// Do a double-flip.
...
}
else {
return false; // Explain why here.
}
//if (bar 1) {
//
// // Do a triple-flip.
// ...
//}
//else {
// return false;
//}
5.2 文檔注釋(Documentation Comments)
注意:此處描述的注釋格式之范例,參見"Java源文件范例"
若想了解更多,參見"How to Write Doc Comments for Javadoc",其中包含了有關(guān)文檔注釋標記的信息(@return, @param, @see):
若想了解更多有關(guān)文檔注釋和javadoc的詳細資料,參見javadoc的主頁:
文檔注釋描述Java的類、接口、構(gòu)造器,方法,以及字段(field)。每個文檔注釋都會被置于注釋定界符/**...*/之中,一個注釋對應一個類、接口或成員。該注釋應位于聲明之前:
/**
* The Example class provides ...
*/
public class Example { ...
注意頂層(top-level)的類和接口是不縮進的,而其成員是縮進的。描述類和接口的文檔注釋的第一行(/**)不需縮進;隨后的文檔注釋每行都縮進1格(使星號縱向?qū)R)。成員,包括構(gòu)造函數(shù)在內(nèi),其文檔注釋的第一行縮進4格,隨后每行都縮進5格。
若你想給出有關(guān)類、接口、變量或方法的信息,而這些信息又不適合寫在文檔中,則可使用實現(xiàn)塊注釋(見5.1.1)或緊跟在聲明后面的單行注釋(見5.1.2)。例如,有關(guān)一個類實現(xiàn)的細節(jié),應放入緊跟在類聲明后面的實現(xiàn)塊注釋中,而不是放在文檔注釋中。
文檔注釋不能放在一個方法或構(gòu)造器的定義塊中,因為Java會將位于文檔注釋之后的第一個聲明與其相關(guān)聯(lián)。
6 聲明(Declarations)
6.1 每行聲明變量的數(shù)量(Number Per Line)
推薦一行一個聲明,因為這樣以利于寫注釋。亦即,
int level; // indentation level
int size; // size of table
要優(yōu)于,
int level, size;
不要將不同類型變量的聲明放在同一行,例如:
int foo, fooarray[]; //WRONG!
注意:上面的例子中,在類型和標識符之間放了一個空格,另一種被允許的替代方式是使用制表符:
int level; // indentation level
int size; // size of table
Object currentEntry; // currently selected table entry
6.2 初始化(Initialization)
盡量在聲明局部變量的同時初始化。唯一不這么做的理由是變量的初始值依賴于某些先前發(fā)生的計算。
6.3 布局(Placement)
只在代碼塊的開始處聲明變量。(一個塊是指任何被包含在大括號"{"和"}"中間的代碼。)不要在首次用到該變量時才聲明之。這會把注意力不集中的程序員搞糊涂,同時會妨礙代碼在該作用域內(nèi)的可移植性。
void myMethod() {
int int1 = 0; // beginning of method block
if (condition) {
int int2 = 0; // beginning of "if" block
...
}
}
該規(guī)則的一個例外是for循環(huán)的索引變量
for (int i = 0; i maxLoops; i++) { ... }
避免聲明的局部變量覆蓋上一級聲明的變量。例如,不要在內(nèi)部代碼塊中聲明相同的變量名:
int count;
...
myMethod() {
if (condition) {
int count = 0; // AVOID!
...
}
...
}
6.4 類和接口的聲明(Class and Interface Declarations)
當編寫類和接口是,應該遵守以下格式規(guī)則:
- 在方法名與其參數(shù)列表之前的左括號"("間不要有空格
- 左大括號"{"位于聲明語句同行的末尾
- 右大括號"}"另起一行,與相應的聲明語句對齊,除非是一個空語句,"}"應緊跟在"{"之后
class Sample extends Object {
int ivar1;
int ivar2;
Sample(int i, int j) {
ivar1 = i;
ivar2 = j;
}
int emptyMethod() {}
...
}
- 方法與方法之間以空行分隔
7 語句(Statements)
7.1 簡單語句(Simple Statements)
每行至多包含一條語句,例如:
argv++; // Correct
argc--; // Correct
argv++; argc--; // AVOID!
7.2 復合語句(Compound Statements)
復合語句是包含在大括號中的語句序列,形如"{ 語句 }"。例如下面各段。
- 被括其中的語句應該較之復合語句縮進一個層次
- 左大括號"{"應位于復合語句起始行的行尾;右大括號"}"應另起一行并與復合語句首行對齊。
- 大括號可以被用于所有語句,包括單個語句,只要這些語句是諸如if-else或for控制結(jié)構(gòu)的一部分。這樣便于添加語句而無需擔心由于忘了加括號而引入bug。
7.3 返回語句(return Statements)
一個帶返回值的return語句不使用小括號"()",除非它們以某種方式使返回值更為顯見。例如:
return;
return myDisk.size();
return (size ? size : defaultSize);
7.4 if,if-else,if else-if else語句(if, if-else, if else-if else Statements)
if-else語句應該具有如下格式:
if (condition) {
statements;
}
if (condition) {
statements;
} else {
statements;
}
if (condition) {
statements;
} else if (condition) {
statements;
} else{
statements;
}
注意:if語句總是用"{"和"}"括起來,避免使用如下容易引起錯誤的格式:
if (condition) //AVOID! THIS OMITS THE BRACES {}!
statement;
7.5 for語句(for Statements)
一個for語句應該具有如下格式:
for (initialization; condition; update) {
statements;
}
一個空的for語句(所有工作都在初始化,條件判斷,更新子句中完成)應該具有如下格式:
for (initialization; condition; update);
當在for語句的初始化或更新子句中使用逗號時,避免因使用三個以上變量,而導致復雜度提高。若需要,可以在for循環(huán)之前(為初始化子句)或for循環(huán)末尾(為更新子句)使用單獨的語句。
7.6 while語句(while Statements)
一個while語句應該具有如下格式
while (condition) {
statements;
}
一個空的while語句應該具有如下格式:
while (condition);
7.7 do-while語句(do-while Statements)
一個do-while語句應該具有如下格式:
do {
statements;
} while (condition);
7.8 switch語句(switch Statements)
一個switch語句應該具有如下格式:
switch (condition) {
case ABC:
statements;
/* falls through */
case DEF:
statements;
break;
case XYZ:
statements;
break;
default:
statements;
break;
}
每當一個case順著往下執(zhí)行時(因為沒有break語句),通常應在break語句的位置添加注釋。上面的示例代碼中就包含注釋/* falls through */。
7.9 try-catch語句(try-catch Statements)
一個try-catch語句應該具有如下格式:
try {
statements;
} catch (ExceptionClass e) {
statements;
}
一個try-catch語句后面也可能跟著一個finally語句,不論try代碼塊是否順利執(zhí)行完,它都會被執(zhí)行。
try {
statements;
} catch (ExceptionClass e) {
statements;
} finally {
statements;
}
8 空白(White Space)
8.1 空行(Blank Lines)
空行將邏輯相關(guān)的代碼段分隔開,以提高可讀性。
下列情況應該總是使用兩個空行:
- 一個源文件的兩個片段(section)之間
- 類聲明和接口聲明之間
下列情況應該總是使用一個空行:
- 兩個方法之間
- 方法內(nèi)的局部變量和方法的第一條語句之間
- 塊注釋(參見"5.1.1")或單行注釋(參見"5.1.2")之前
- 一個方法內(nèi)的兩個邏輯段之間,用以提高可讀性
8.2 空格(Blank Spaces)
下列情況應該使用空格:
- 一個緊跟著括號的關(guān)鍵字應該被空格分開,例如:
while (true) {
...
}
注意:空格不應該置于方法名與其左括號之間。這將有助于區(qū)分關(guān)鍵字和方法調(diào)用。
- 空白應該位于參數(shù)列表中逗號的后面
- 所有的二元運算符,除了".",應該使用空格將之與操作數(shù)分開。一元操作符和操作數(shù)之間不因該加空格,比如:負號("-")、自增("++")和自減("--")。例如:
a += c + d;
a = (a + b) / (c * d);
while (d++ = s++) {
n++;
}
printSize("size is " + foo + "\n");
- for語句中的表達式應該被空格分開,例如:
for (expr1; expr2; expr3)
- 強制轉(zhuǎn)型后應該跟一個空格,例如:
myMethod((byte) aNum, (Object) x);
myMethod((int) (cp + 5), ((int) (i + 3)) + 1);
9 命名規(guī)范(Naming Conventions)
命名規(guī)范使程序更易讀,從而更易于理解。它們也可以提供一些有關(guān)標識符功能的信息,以助于理解代碼,例如,不論它是一個常量,包,還是類。
標識符類型 命名規(guī)則 例子
包(Packages) 一個唯一包名的前綴總是全部小寫的ASCII字母并且是一個頂級域名,通常是com,edu,gov,mil,net,org,或1981年ISO 3166標準所指定的標識國家的英文雙字符代碼。包名的后續(xù)部分根據(jù)不同機構(gòu)各自內(nèi)部的命名規(guī)范而不盡相同。這類命名規(guī)范可能以特定目錄名的組成來區(qū)分部門(department),項目(project),機器(machine),或注冊名(login names)。 com.sun.eng
com.apple.quicktime.v2
edu.cmu.cs.bovik.cheese
類(Classes) 命名規(guī)則:類名是個一名詞,采用大小寫混合的方式,每個單詞的首字母大寫。盡量使你的類名簡潔而富于描述。使用完整單詞,避免縮寫詞(除非該縮寫詞被更廣泛使用,像URL,HTML) class Raster;
class ImageSprite;
接口(Interfaces) 命名規(guī)則:大小寫規(guī)則與類名相似 interface RasterDelegate;
interface Storing;
方法(Methods) 方法名是一個動詞,采用大小寫混合的方式,第一個單詞的首字母小寫,其后單詞的首字母大寫。 run();
runFast();
getBackground();
變量(Variables) 除了變量名外,所有實例,包括類,類常量,均采用大小寫混合的方式,第一個單詞的首字母小寫,其后單詞的首字母大寫。變量名不應以下劃線或美元符號開頭,盡管這在語法上是允許的。
變量名應簡短且富于描述。變量名的選用應該易于記憶,即,能夠指出其用途。盡量避免單個字符的變量名,除非是一次性的臨時變量。臨時變量通常被取名為i,j,k,m和n,它們一般用于整型;c,d,e,它們一般用于字符型。 char c;
int i;
float myWidth;
實例變量(Instance Variables) 大小寫規(guī)則和變量名相似,除了前面需要一個下劃線 int _employeeId;
String _name;
Customer _customer;
常量(Constants) 類常量和ANSI常量的聲明,應該全部大寫,單詞間用下劃線隔開。(盡量避免ANSI常量,容易引起錯誤) static final int MIN_WIDTH = 4;
static final int MAX_WIDTH = 999;
static final int GET_THE_CPU = 1;
10 編程慣例(Programming Practices)
10.1 提供對實例以及類變量的訪問控制(Providing Access to Instance and Class Variables)
若沒有足夠理由,不要把實例或類變量聲明為公有。通常,實例變量無需顯式的設(shè)置(set)和獲取(gotten),通常這作為方法調(diào)用的邊緣效應 (side effect)而產(chǎn)生。
一個具有公有實例變量的恰當例子,是類僅作為數(shù)據(jù)結(jié)構(gòu),沒有行為。亦即,若你要使用一個結(jié)構(gòu)(struct)而非一個類(如果java支持結(jié)構(gòu)的話),那么把類的實例變量聲明為公有是合適的。
北大青鳥java培訓:Java編程開發(fā)規(guī)范及其技巧?
在用Java進行開發(fā)前,一定要牢牢遵守Java的開發(fā)規(guī)范,只有這樣你的Java開發(fā)之路才能更加順暢。
而掌握相應的Java開發(fā)技巧,則可以讓你工作起來事半功倍。
那在編寫代碼時有什么開發(fā)規(guī)范和技巧呢?電腦培訓給你詳細介紹一下吧。
1、代碼編寫規(guī)范:代碼編寫遵守Java通用開發(fā)規(guī)范和必聯(lián)代碼開發(fā)規(guī)范;每個類及方法都要有合理的注釋,并且對注釋要持續(xù)維護;根據(jù)接口需求編寫單元測試用例,再編寫實現(xiàn)類使得單元測試通過,如此循環(huán)往復以使得所有的單元測試通過;要求每個Java方法的代碼行數(shù)不能超過100行;代碼編寫按照功能劃分,一個接口分為多個方法,每一個方法做什么事情,做到思路清晰;接口設(shè)計盡量做到多兼容性,方便后期開發(fā)。
2、數(shù)據(jù)庫設(shè)計及SQL規(guī)范不使用MySQL數(shù)據(jù)庫外鍵約束,通過應用程序邏輯實現(xiàn)關(guān)聯(lián)約束;適當建立索引,經(jīng)常作為查詢條件的字段、唯一性程度高、長度不是很長的、數(shù)量不宜太多,一般一個表的索引數(shù)目在5個以內(nèi);表名長度不能超過30個字符,表名最好選擇一個單詞,能夠準確清晰明了地表示實體含義,若必須多個單詞則以下劃線“_”分隔,單詞所有字母均小寫;
為什么要遵守Java代碼規(guī)范
為什么要遵守Java代碼規(guī)范?當你第一次接觸到Java代碼規(guī)范的時候,你是不是覺得很麻煩呢?比如關(guān)于統(tǒng)一的原則,一再的強調(diào),但是你一再的忘記,或者壓根就不想照做,會出現(xiàn)什么樣的后果呢?今天動力節(jié)點IT培訓的小編將借Java代碼規(guī)范中的統(tǒng)一來說說,自己對為什么要遵守Java代碼規(guī)范,發(fā)表自己簡單的看法。
Java代碼規(guī)范中的統(tǒng)一是指,對于同一個概念,在程序中用同一種表示方法,比如對于供應商,既可以用supplier,也可以用provider,但是我們只能選定一個使用,至少在一個Java項目中保持統(tǒng)一。統(tǒng)一是作為重要的,如果對同一概念有不同的表示方法,會使代碼混亂難以理解。即使不能取得好的名稱,但是只要統(tǒng)一,閱讀起來也不會太困難,因為閱讀者只要理解一次。
而如果你在一個項目中不遵守已經(jīng)制定好的統(tǒng)一規(guī)范,那么不僅是給自己帶來麻煩,也是給其他工作人員帶來不便,在要進行整理的時候,你的不同,會帶來不必要的交流麻煩。作為一個Java程序員,你一般是屬于團隊中的一員,你不遵守制定好的Java代碼規(guī)范,其他人也不遵守那么你們的團隊就得亂套了,所以面對Java代碼規(guī)范的學習,不要覺得無趣,還是得用心記住,并且予以遵守。
當前題目:代碼規(guī)范指南java,代碼規(guī)范說明
鏈接地址:http://www.ef60e0e.cn/article/heoges.html