【程式設計素質】Java編碼約定
優秀的程式碼勝過冗長的文件。
1,命名規範
駝峰風格:不用下劃線,各個單詞拼一起,首字母大寫以區別。變數名和方法名首字母小寫,類名首字母大寫。
統一、達意、簡潔、英文。
1.1 類名命名
首字母大寫、駝峰風格。
字尾:類名往往用不同的字尾表達額外的意思,如下表。
字尾名 | 意義 |
---|---|
Service | 表明這個類是個服務類,裡面包含了給其他類提同業務服務的方法 |
Impl | 這個類是一個實現類,而不是介面 |
Inter | 這個類是一個介面 |
Dao | 這個類封裝了資料訪問方法 |
Action | 直接處理頁面請求,管理頁面邏輯了類 |
Listener | 響應某種事件的類 |
Event | 這個類代表了某種事件 |
Servlet | 一個Servlet |
Factory | 生成某種物件工廠的類 |
Adapter | 用來連線某種以前不被支援的物件的類 |
Job | 某種按時間執行的任務 |
Wrapper | 這是一個包裝類,為了給某個類提供沒有的能力 |
Bean | 這是一個POJO |
POJO(Plain Ordinary Java Object):簡單的Java物件,實際就是普通JavaBeans,是為了避免和EJB混淆所創造的簡稱。實現了一種規範的Java物件。
EJB(Enterprise JavaBean):是一組"功能"JavaBean的集合。這一組JavaBean組合起來實現了某個企業組的業務邏輯。這裡的一組JavaBean不是亂組合的,它們要滿足能實現某項業務功能的搭配。
1.2 方法名
首字母小寫,駝峰命名。
動詞在前,如 addOrder()。
字首:動詞字首往往表達特定的含義,如下表。
字首名 | 意義 |
---|---|
create | 建立 |
delete | 刪除 |
add | 建立,暗示新建立的物件屬於某個集合 |
remove | 刪除 |
init或則initialize | 初始化,暗示會做些諸如獲取資源等特殊動作 |
destroy | 銷燬,暗示會做些諸如釋放資源的特殊動作 |
open | 開啟 |
close | 關閉 |
read | 讀取 |
write | 寫入 |
get | 獲得 |
set | 設定 |
prepare | 準備 |
copy | 複製 |
modity | 修改 |
calculate | 數值計算 |
do | 執行某個過程或流程 |
dispatch | 判斷程式流程轉向 |
start | 開始 |
stop | 結束 |
send | 傳送某個訊息或事件 |
receive | 接受訊息或時間 |
respond | 響應使用者動作 |
find | 查詢物件 |
update | 更新物件 |
1.3 域(field)名
1.3.1 靜態常量
全大寫用下劃線分割,如:
public static find String ORDER_PAID_EVENT = "ORDER_PAID_EVENT";
1.3.2 列舉
全大寫,用下劃線分割,如
public enum Events {
ORDER_PAID,
ORDER_CREATED
}
1.3.3 其他、區域性變數名
首字母小寫,駱駝法則,如:
public String orderName;
2,程式設計風格
用空格字元縮排原始碼,不要用tab,每個縮排4個空格。
2.1 原始檔編碼
原始檔使用utf-8編碼,結尾用\n
分格。
如果原始檔不是以“回車換行”結束,則目標檔案將會多出2位元組。
\r 回車 告訴打字機把列印頭定位在左邊界;
\n 換行 告訴打字機把紙向下移一行.
剛開始儲存器很貴,一些科學家認為在每行結尾加兩個字元太浪費了,加一個就可以。於是,就出現了分歧。
作業系統的不同,換行符操也不同:
/r Mac
/n Unix/Linux
/r/n Windows
一個直接後果是,Unix/Mac系統下的檔案在Windows裡打 開的話,所有文字會變成一行;而Windows裡的檔案在Unix/Mac下開啟的話,在每行的結尾可能會多出一個^M符號。
2.1.1 原始檔結構
一個原始檔包含(按順序地):
許可證或版權資訊(如有需要)
package語句
import語句
一個頂級類(只有一個)
以上每個部分之間用一個空行隔開。
2.2 行寬
行寬度不要超過130。
2.3 包的匯入
刪除不用的匯入,儘量不要使用整個包的匯入。在eclipse下經常使用快捷鍵 ctrl+shift+o 修正匯入。mac:control+option+o
2.3.1 順序和間距
import語句可分為以下幾組,按照這個順序,每組由一個空行分隔:
所有的靜態匯入獨立成組
com.google imports(僅當這個原始檔是在com.google包下)
第三方的包。每個頂級包為一組,字典序。例如:android, com, junit, org, sun
java imports
javax imports
組內不空行,按字典序排列。
2.4 類格式
2.5 域格式
每行只能宣告一個域。
域的宣告用空行隔開。
2.5 方法格式
2.6 程式碼塊格式
2.6.1 縮排風格
大括號的開始在程式碼塊開始的行尾,閉合在和程式碼塊同一縮排的行首.
2.6.2 表示分割時用一個空格
if ( a > b ) {
//do something here
};
a + b = c;
b - d = e;
return a == b ? 1 : 0;
call(a, b, c);
2.6.3 空行的使用
空行可以表達程式碼在語義上的分割,註釋的作用範圍,等等。將類似操作,或一組操作放在一起不用空行隔開,而用空行隔開不同組的程式碼。
3,註釋規範
少而精。
註釋要和程式碼同步,過多的註釋會成為開發的負擔註釋不是用來管理程式碼版本的,如果有程式碼不要了,直接刪除,svn會有記錄的,不要註釋掉,否則以後沒人知道那段註釋掉的程式碼該不該刪除。
3.1 Java Doc
表明類、域和方法等的意義和用法等的註釋,要以javadoc的方式來寫。Java Doc是個類的使用者來看的,主要介紹 是什麼,怎麼用等資訊。凡是類的使用者需要知道,都要用Java Doc 來寫。非Java Doc的註釋,往往是個程式碼的維護者看的,著重告述讀者為什麼這樣寫,如何修改,注意什麼問題等。 如下:
/**
* This is a class comment
*/
public class TestClass {
/**
* This is a field comment
*/
public String name;
/**
* This is a method comment
*/
public void call() {
}
}
3.2 塊級別註釋
3.3.1 塊級別註釋,單行時用 //, 多行時用 /* … */。
3.3.2 較短的程式碼塊用空行表示註釋作用域
3.3.3 較長的程式碼塊要用
/*------ start: ------*/
和
/*-------- end: -------*/
包圍
舉例:
/*----------start: 訂單處理 ------- */
//取得dao
OrderDao dao = Factory.getDao("OrderDao");
/* 查詢訂單 */
Order order = dao.findById(456);
//更新訂單
order.setUserName("uu");
orderDao.save(order);
/*----------end: 訂單處理 ------- */
3.3.4 可以考慮使用大括號來表示註釋範圍
使用大括號表示註釋作用範圍的例子:
/*----------訂單處理 ------- */
{
//取得dao
OrderDao dao = Factory.getDao("OrderDao");
/* 查詢訂單 */
Order order = dao.findById(456);
//更新訂單
order.setUserName("uu");
orderDao.save(order);
}
3.4 行內註釋
行內註釋用 // 寫在行尾
4,其他程式設計注意
4.1 使用log而不是System.out.println()
log可以設定級別,可以控制輸出到哪裡,容易區分是在程式碼的什麼地方列印的,而System.out.print則不行。而且,System.out.print的速度很慢。所以,除非是有意的,否則,都要用log。至少在提交到svn之前把System.out.print換成log。
4.2 每個if while for等語句,都不要省略大括號{}
4.3 善用TODO:
在程式碼中加入 //TODO: ,大部分的ide都會幫你提示,讓你知道你還有什麼事沒有做。
4.4 在需要留空的地方放一個空語句或註釋,告訴讀者,你是故意的
比如:
if (!exists(order)) {
;
}
或:
if (!exists(order)) {
//nothing to do
}
4.5 減少程式碼巢狀層次
程式碼巢狀層次達3層以上時,一般人理解起來都會困難。
減少措施:
- 合併條件
- 利用 return 以省略後面的else
- 利用子方法
4.6 程式職責單一
讓程式單元的職責單一,可以使你在編寫這段程式時關注更少的東西,從而降低難度,減少出錯。
4.7 變數的宣告,初始化和被使用盡量放到一起
比方說如下程式碼:
int orderNum= getOrderNum();
//do something withou orderNum here
call(orderNum);
上例中的註釋處代表了一段和orderNum不相關的程式碼。orderNum的宣告和初始化離被使用的地方相隔了很多行的程式碼,這樣做不好,不如這樣:
//do something withou orderNum here
int orderNum= getOrderNum();
call(orderNum);
4.8 縮小變數的作用域
能用區域性變數的,不要使用例項變數,能用例項變數的,不要使用類變數。變數的生存期越短,意味著它被誤用的機會越小,同一時刻程式設計師要關注的變數的狀態越少。
例項變數和類變數預設都不是執行緒安全的,區域性變數是執行緒安全的。
4.9 儘量不要用引數來帶回方法運算結果
引數作用是儲存數值。職責單一原則,引數儘量不做返回值。
- 包名使用小寫字母
- import不要使用萬用字元
即,不要出現類似這樣的import語句:import java.util.*; - 列長限制
一個專案可以選擇一行120個字元的列限制,超出列長限制時換行,換行時縮排至少4個空格,縮排不要用tab。 - 註釋
註釋應少而精,程式碼的關鍵處應該有註釋, 註釋不能誤導讀者。 - 變數宣告
每次只宣告一個變數,不要使用組合宣告,比如int a, b;
需要變數時才宣告,並儘快進行初始化。 - 命名約定
命名應該:見名知意、簡潔,避免拼音與英文混用。
命名風格:
類名以UpperCamelCase風格編寫
非常量欄位名、方法名、引數名、區域性變數名以lowerCamelCase風格編寫
常量名以CONSTANT_CASE風格編寫 - 類成員順序
每個類應該以某種邏輯去排序它的成員,維護者應該要能解釋這種排序邏輯。比如,新的方法不能總是習慣性地新增到類的結尾。 - 慎用System.out.println()
使用log而不是System.out.println() - 使用大括號(即使是可選的)
大括號與if, else, for, do, while語句一起使用,即使只有一條語句(或是空),也應該把大括號寫上。 - 減少程式碼巢狀
程式碼巢狀層次達3層以上時,一般人理解起來都會困難。
減少巢狀的方法有很多:(1)合併條件;(2)利用return以省略後面的else;(3)使用子方法 - 異常處理
捕獲的異常不能忽視,典型的響應方式是列印日誌
本文來自 蘇州-微塵 的CSDN 部落格 ,全文地址請點選:https://blog.csdn.net/wangnan537/article/details/49965703?utm_source=copy
相關文章
- 【程式設計素質】程式設計思想總結程式設計
- 程式設計師的基本素質如何?程式設計師
- java程式設計規約----程式碼風格(一)Java程式設計
- 高屋建瓴:梳理程式設計約定程式設計
- java編譯、編碼、語言設定Java編譯
- 升級 Java 程式設計規範的6個約定Java程式設計
- 給程式設計師的幾點程式設計經驗----《編寫高質量程式碼》程式設計師
- 優秀程式設計師具備的8種素質程式設計師
- [轉]高質量JAVA程式碼編寫規範Java
- 怎樣編寫高質量的java程式碼Java
- 設計模式之高質量程式碼設計模式
- 談談一個程式設計師本該具備的素質程式設計師
- [技術討論]程式設計師的基本技能和素質程式設計師
- 如何才算一個高素質的網際網路 IT 程式設計師、人才、碼農?程式設計師
- 量化合約開發丨量化合約原始碼丨JAVA系統開發程式設計程式碼示例原始碼Java程式設計
- Java設定JSON字串引數編碼JavaJSON字串
- Redis之父:10x程式設計師應該具備哪些素質Redis程式設計師
- 一名靠譜的JavaScript程式設計師應備的素質JavaScript程式設計師
- C與彙編程式的約定呼叫
- 編寫高質量程式碼
- JAVA優質程式碼編寫的30條可行建議Java
- 程式設計師 vs 編碼員程式設計師
- 最近發現有些應聘程式設計師素質那是相當那個。。。程式設計師
- 【Java】程式設計過程中遇到的中文編碼問題Java程式設計
- 程式設計師筆記|如何編寫高效能的Java程式碼程式設計師筆記Java
- Google C++ 程式設計風格指南:命名約定GoC++程式設計
- 程式碼整潔之道:程式設計師的職業素養(十三)程式設計師
- 馬蹄鏈matic代幣合約質押挖礦系統開發程式碼程式設計示例程式設計
- 好程式設計師Java培訓分享Java函式式編碼結構程式設計師Java函式
- java連線資料庫時jdbc設定編碼Java資料庫JDBC
- JPA設定MySQL編碼MySql
- 編碼設定應注意
- Tomcat 設定編碼Tomcat
- 網頁字元編碼、語言程式碼設定與SEO網頁字元
- 態度決定一切 程式設計師的職業素養程式設計師
- Google C++程式設計風格指南(五):命名約定GoC++程式設計
- 瘋狂Java程式設計師的基本素養學習筆記Java程式設計師筆記
- 軟體設計雜談(二)--軟體設計與設計人員的個人素質 (轉)