前言
這份文檔參考了 Google Java 編程風格規范和 Google 官方 Android 編碼風格規范。該文檔僅供參考,只要形成一個統一的風格,見量知其意就可。
源文件基礎
編碼格式
源文件編碼格式為 UTF-8。
文件名
源文件以其最頂層的類名來命名,大小寫敏感,文件擴展名為.java。
源文件結構
許可證與版權信息
如果一個文件包含許可證或版權信息,那么它應當被放在文件最前面。
package語句
package 語句不換行,列限制(3.4節)并不適用于package語句。(即package語句寫在一行里)
import語句
1、import不要使用通配符:
即,不要出現類似這樣的import語句:import java.util.*;
2、不要換行:
import語句不換行,列限制(4.4節)并不適用于import語句。(每個import語句獨立成行)
類成員區順序
類成員順序對代碼的可讀性是有很大幫助的,從上到下的排列順序為:
常量區
UI控件變量區
普通變量區
重載方法區(重載,永不分離)
聲明周期區(在生命周期區方法內加入需要執行的代碼)
類成員劃分
按照發生的先后順序排列
常量按照使用先后排列
UI控件成員變量按照layout文件中的先后順序排列
普通成員變量按照使用的先后順序排列
方法基本上都按照調用的先后順序在各自區塊中排列
格式術語
大括號
1、使用大括號(即使是可選的)
大括號與if, else, for, do, while語句一起使用,即使只有一條語句(或是空),也應該把大括號寫上。
2、非空塊:K & R 風格
對于非空塊和塊狀結構,大括號遵循 Kernighan 和 Ritchie 風格 (Egyptian brackets):
左大括號前不換行;
左大括號后換行;
右大括號前換行;
如果右大括號是一個語句、函數體或類的終止,則右大括號后換行; 否則不換行。
例如,如果右大括號后面是else或逗號,則不換行。
示例:
return new MyClass() {
@Override
public void method() {
if (condition()) {
try {
something();
} catch (ProblemException e) {
recover();
}
}
}
};
空塊:可以用簡潔版本
一個空的塊狀結構里什么也不包含,大括號可以簡潔地寫成{},不需要換行。
例外:如果它是一個多塊語句的一部分(if/else 或 try/catch/finally) ,即使大括號內沒內容,右大括號也要換行。
示例:
void doNothing() {}
塊縮進
每當開始一個新的塊,縮進增加4個空格,當塊結束時,縮進返回先前的縮進級別。縮進級別適用于代碼和注釋。(見3.1.2節中的代碼示例)
一行一個語句
每個語句后要換行。
列限制
一個項目可以選擇一行80個字符或100個字符的列限制,除了下述例外,任何一行如果超過這個字符數限制,必須自動換行。
空白
垂直空白
有且只有一個換行
類成員區劃分
在方法體內,語句的邏輯分組間使用空行。
類的第一個成員與最后一個成員的空白。
水平空白
類型和變量之間:List list
分隔任何保留字與緊隨其后的左括號(()(如if, for catch等)。
如果在一條語句后做注釋,則雙斜杠(//)兩邊都要空格。
在, : ;及右括號())后
具體結構
1、枚舉類
枚舉常量間用逗號隔開,換行可選。
private enum Suit {
CLUBS,
HEARTS,
SPADES,
DIAMONDS
}
2、變量聲明
1)、每次只聲明一個變量
不要使用組合聲明,比如int a, b;
2)、需要時才聲明,并盡快進行初始化
不要在一個代碼塊的開頭把局部變量一次性都聲明了(這是c語言的做法),而是在第一次需要使用它時才聲明。 局部變量在聲明時最好就進行初始化,或者聲明后盡快進行初始化。
3、數組
1)、非C風格的數組聲明
中括號是類型的一部分:String[] args, 而非 String args[]
4、switch語句
每個switch語句都包含一個default語句組,即使它什么代碼也不包含。
5、注解(Annotations)
1)、方法注解
注解緊跟在文檔塊后面,應用于類、方法和構造函數,一個注解獨占一行。
2)、變量注解
沒有特殊限制,也可以寫成:
@Partial @Mock DataLoader loader;
6、Modifiers(修飾)
類和成員的modifiers如果存在,則按Java語言規范中推薦的順序出現。
public protected private abstract static final transient volatile synchronized native strictfp
命名規范
包名
包名全部小寫,連續的單詞只是簡單地連接起來,不使用下劃線。
例如:com.shuidi.huzhu
類名
類名都以UpperCamelCase風格編寫,后綴類型,不要加下劃線。
類名通常是名詞或名詞短語,接口名稱有時可能是形容詞或形容詞短語。名詞,采用大駝峰命名法,盡量避免縮寫,除非該縮寫是眾所周知的, 比如HTML,URL,如果類名稱中包含單詞縮寫,則單詞縮寫的每個字母均應大寫。
WelcomeActivity、NewDetailAdapter、HomePosterParser、ThreadPoolManager等等
測試類的命名以它要測試的類的名稱開始,以Test結束。
例如:HashTest 或 HashIntegrationTest。
接口(interface):命名規則與類一樣采用大駝峰命名法,多以able或ible結尾,如
interface Runnable ;
interface Accessible;
方法名
方法名都以 LowerCamelCase 風格編寫。
方法名通常是動詞或動詞短語。
初始化方法,命名以init開頭,例:initView
按鈕點擊方法,命名以to開頭,例:toLogin
設置方法,命名以set開頭,例:setData
具有返回值的獲取方法,命名以get開頭,例:getData
通過異步加載數據的方法,命名以load開頭,例:loadData
布爾型的判斷方法,命名以is或has,或具有邏輯意義的單詞如equals,例:isEmpty
常量名
全部為大寫單詞,單詞之間用下劃線分開。
public final static int PAGE_SIZE = 20;
參數名、變量名
1、控件類型
類型描述+{范圍描述+}意義描述的組合,用駝峰式,首字母小
private TextView tvHeaderTitle; // 標題欄的標題
private Button btnLogin; // 登錄按鈕
2、其他類型
{范圍描述+}意義描述+類型描述的組合,用駝峰式,首字母小
private ArrayList<String> commentList;
private String content;
資源文件命名
資源文件命名與java命名不同,大多采用前綴命名法,對類型進行區分
1、控件ID命名
<!-- 這是標題欄的標題 -->
<TextView
android:id="@+id/txt_header_title"
... />
<!-- 這是登錄按鈕 -->
<Button
android:id="@+id/btn_login"
... />
2、layout命名
組件類型{范圍}功能,范圍可選,只在有明確定義的范圍內才需要加上。
activity_{范圍_}功能,為Activity的命名格式
fragment_{范圍_}功能,為Fragment的命名格式
dialog_{范圍_}功能,為Dialog的命名格式
item_{范圍_}功能,為列表的item命名格式
widget_{范圍_}功能,為自定義控件類命名格式
header_{范圍_}功能,為列表的HeaderView命名格式
footer_{范圍_}功能,為列表的FooterView命名格式
3、string的命名
類型{范圍}功能,范圍可選。
傳統命名方式:
頁面標題,命名格式為:title_頁面
按鈕文字,命名格式為:btn_按鈕事件
標簽文字,命名格式為:label_標簽文字
選項卡文字,命名格式為:tab_選項卡文字
消息框文字,命名格式為:toast_消息
編輯框的提示文字,命名格式為:hint_提示信息
圖片的描述文字,命名格式為:desc_圖片文字
對話框的文字,命名格式為:dialog_文字
menu的item文字,命名格式為:action_文字
建議命名方式:
String命名如果以傳統命名法來命名,有些按照業務邏輯進行命名,好處是可插拔,壞處是資源命名滿天飛,迭代周期久后導致過于臃腫,建議根據實際意義進行命名。
示例:
我的優惠券 :str_mine_coupon
支付 :str_pay
4、colors的命名
傳統命名方式:
前綴{控件}{范圍}{_后綴},控件、范圍、后綴可選,但控件和范圍至少要有一個。
背景顏色,添加bg前綴
文本顏色,添加text前綴
分割線顏色,添加div前綴
區分狀態時,默認狀態的顏色,添加normal后綴
區分狀態時,按下時的顏色,添加pressed后綴
區分狀態時,選中時的顏色,添加selected后綴
區分狀態時,不可用時的顏色,添加disable后綴
建議命名方式:
由于色值復用較多,個人建議采用更為直接的匈牙利命名法,達到更直觀,更簡潔的使用
示例:
正常顏色 :col_000000
帶透明度顏色 :col_000000_translucent25
5、drawable的命名
前綴{控件}{范圍}{_后綴},控件、范圍、后綴可選,但控件和范圍至少要有一個。
圖標類,添加ic前綴
背景類,添加bg前綴
分隔類,添加div前綴
默認類,添加def前綴
區分狀態時,默認狀態,添加normal后綴
區分狀態時,按下時的狀態,添加pressed后綴
區分狀態時,選中時的狀態,添加selected后綴
區分狀態時,不可用時的狀態,添加disable后綴
多種狀態的,添加selector后綴(一般為ListView的selector或按鈕的selector)
6、動畫文件命名
動畫類型_動畫方向。
fade_in,淡入
fade_out,淡出
push_down_in,從下方推入
push_down_out,從下方推出
slide_in_from_top,從頭部滑動進入
zoom_enter,變形進入
shrink_to_middle,中間縮小
附錄:
1、 UI控件縮寫表 : 建議控件的命名以前綴命名
LinearLayout ll llFriend
RelativeLayout rl rlMessage
FrameLayout fl flCart
TableLayout tl tlTab
Button btn btnHome
ImageButton ibtn btnPlay
TextView tv tvName
EditText et etName
ListView lv lvCart
RecycleView rv rvTopic
ImageView iv ivHead
GridView gv gvPhoto
2、常見英文單詞縮寫表
icon ic
color col
divider di
selector sl
average avg
background bg
buffer buf
control ctrl
delete del
document doc
error err
escape esc
increment inc
infomation info
initial init
image img
length len
library lib
message msg
password pwd
position pos
server srv
source src
string str
temp tmp
window win