1 JAVA 編碼規範 1.0 (jetbrick 版)
1.1 Java 文件格式
- 文件格式必須是
UTF-8
,無BOM
格式 - 文件回車換行符必須是
Unix
風格 - 每個文件結尾必須有一個空白行
- 行尾空白內容應該被 trim 掉
-
每個文件開頭必須寫上項目的標準 LICENSE 註釋,如下:
12345678910111213141516171819/**
* jetbrick-template
* http://subchen.github.io/jetbrick-template/
*
* Copyright 2010-2013 Guoqiang Chen. All rights reserved.
* Email: [email protected]
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
代碼必須是格式化的,請使用統一的 Eclipse 的代碼格式文件:eclipse-jetbrick-style-formatter.xml
-
不想被自動格式化的代碼請用
@formatter
包裹,如:12345678//@formatter:off
private
static
final
String[] DATE_PATTERNS =
new
String[] {
"yyyy-MM-dd HH:mm:ss.SSS"
,
"yyyy-MM-dd HH:mm:ss"
,
"yyyy-MM-dd"
,
"HH:mm:ss"
};
//@formatter:on
- Java 文件必須是可編譯的,不應該有任何的
warning
存在
1.2 包名
- 包名必須是全部小寫的,最好用一個單詞表示
- 包名必須以
jetbrick
開頭 - 接口或者抽象類的多種實現,推薦以
spi
,support
包命名
1.3 類名
- 類名必須首字母大寫,駝峯命名法: 如
UserInfo
,ClassUtils
- 類名儘量不要縮寫,如果縮寫,必須爲特別常用的縮寫
- 接口的命名不要以
I
開頭 - 抽象類推薦以
Abstract
開頭 - 接口的默認實現推薦以
Default
開頭或者Impl
結尾 - 每個 Class 都需要標註
@auther
,@since
- 每個 Class 都應該有簡短的註釋
1.4 Imports
- Imports 間不要有空行
- 超過 3 個相同包下面的 Class 需要使用
.*
代替 - 不要使用
import static
, 除了JUnit
/TestNG
的assertXXX
方法
1.5 方法
- 方法名稱應該採用首字母小寫,駝峯命名法: 如
getUser
,lookupClass
- 對於一個
public
的方法,都應該對參數進行基本的校驗,比如null
檢測 - 對外開放 API 的
public
方法都需要標註@since
- 每個
public
方法都應該有簡短的註釋
1.6 常量
- 常量必須是全大寫,並用
_
分隔,如MAX_INTEGER
- 常量必須是
static
final
1.7 變量
- 變量名稱必須首字母小寫,駝峯命名法
- 變量名儘量使用縮寫,以簡短爲主
- 不要用拼音,要用英文表示
- 如果是集合或數組,用複數名詞,或者添加
List
,Map
等後綴
1.8 註釋
- 註釋必須和代碼保持一致,中文/英文均可
- 註釋中的第一個句子要以(英文)句號、問號或者感嘆號結束。
javadoc
工具會將註釋中的第一個句子放在方法彙總表和索引中。 - 如果註釋中有超過一個段落,用
<p>
標籤分隔 - 如果註釋中有多個章節,用
<h2>
標籤聲明每個章節的標題 - 示例代碼以
<pre>
包裹
1.9 異常
- 異常類名必須以
Exception
結尾 - 所有自定義異常都必須繼承自
RuntimeException
- 方法儘量不要拋出非
RuntimeException
異常 - 異常應該和主要的 Class 放在一起,而不是所有的異常類放在一個包下面
- 異常描述應該使用英文句子,儘量不要用中文。
- 被
catch
住的Exception
,必須要處理,或者重新拋出
1.10 日誌
- 日誌框架使用
slf4j
- 實例不多的對象類,不要使用
static
聲明log
- 儘量使用
debug
而不是info
級別 - 啓動時候需要輸出的重要日誌,請用
info
級別 - 被
catch
住的Exception
,應該被打印出來log.error(e)
1.11 單元測試
- 單元測試框架用
TestNG
- 單元測試覆蓋率工具用
EclEmma
- Mock 框架使用
Mockito
- 儘可能爲每個方法提供單元測試
- 覆蓋率應該不低於 70%