Android代碼規範——文章來源《IT藍豹》http://itlanbao.com/preview.aspx#1,0html
[-]
一Import的次序
二縮進Indentation
總則
示例代碼
規則說明
三大括號Braces的位置
示例代碼
規則說明
四空格White Space
聲明
類
域
臨時變量
構造體
方法
標號
註解Annotation
枚舉Enumtypes
註解類型Annotationtypes
控制語句
程序塊
if else語句
for語句
switch語句
while和dowhile語句
同步synchronized語句
catch語句
assert語句
return語句
throw語句
表達式
函數調用
賦值
操做數
加括號的表達式
類型轉換
三元條件表達式
數組
聲明
申請
初始化體
數組元素的訪問
泛型
五空白行BlankLines
示例代碼
規則說明
編譯單元之間的空白行
類內部的空白行
六插入新行NewLines
示例代碼
規則說明
插入新行
數組初始化
空的語句
註解
七控制語句ControlStatements
示例代碼
規則說明
八換行LineWrapping
總則
註解Annotation
類聲明
構造體聲明
方法聲明
枚舉聲明
函數調用
表達式
語句
九註釋Comments
十Android中XML文件的格式化
總結
Google對Android的編程規範在Code Style Guidelines for
Contributors中作了描述,並在Android源碼中release了
import和Java的配置文件android.importorder與android-
formatting.xml。本文分析這些配置文件在Eclipse環境下格
式化Android編碼規範都作了什麼,在Java和XML文件中如何具
體體現。
Android源碼目錄
<android_src_root>/development/ide/eclipse/下有文件
android.importorder和android-formatting.xml,能夠在
Eclipse中導入import次序及Java編碼風格:
1)?????打開Window > Preferences > Java > Code Style;
2)?????在Organizer Imports中點擊Imports,選擇
android.importorder導入;
3)?????在Formatter中點擊Imports,選擇android-
formatting.xml導入。
下面講解這些配置都作了什麼,在代碼中如何具體體現的。
1、Import的次序
Google推薦的AndroidJava文件開頭import的次序(按照前後
)是:
com
org
android
java
javax
排列原則:
?這個次序也是根據看import語句的重要性來排定的:首先希
望看到用了android裏的哪些類;而後是其餘第三方的;最後
才關注標準Java庫裏的。
?不一樣的import分組之間是有一個空白行,在5.2.1?4)中描述
。
?同一import分組內部按照字母次序排列。
2、縮進(Indentation)
2.1 總則
縮進只用空格,不用製表符(TAB)。縮進用4個空格,按下
TAB鍵用4個空格代替。
?
2.2 示例代碼
?
[java]?view plaincopy
/**?
?*?Indentation?
?*/??
class?Example?{??
????int[]?myArray?=?{??
????????????1,?2,?3,?4,?5,?6??
????};??
???
????int?theInt?=?1;??
???
????String?someString?=?"Hello";??
???
????double?aDouble?=?3.0;??
???
????void?foo(int?a,?int?b,?int?c,?int?d,?int?e,?int?
f)?{??
????????switch?(a)?{??
????????????case?0:??
????????????????Other.doFoo();??
????????????????break;??
????????????default:??
????????????????Other.doBaz();??
????????}??
????}??
???
????void?bar(List?v)?{??
????????for?(int?i?=?0;?i?<10;?i++)?{??
????????????v.add(new?Integer(i));??
????????}??
????}??
}??
???
enum?MyEnum?{??
????UNDEFINED(0)?{??
????????void?foo()?{??
????????}??
????}??
}??
???
@interface?MyAnnotation?{??
????int?count()?default?1;??
}??
???
2.3 規則說明
1)????? 域不用對齊
? ? ? ??若對齊的話,則myArray,theInt, someString和
aDouble都在同一列上對齊。
2)?????類體內部的聲明全都縮進
? ? ? ??Class Example內的定義[#5 ~ #29]相對class?
Example[#4]都有縮進
3)?????枚舉的聲明要縮進
? ? ? ??UNDEFINED(0) [#33]前面有縮進
4)?????枚舉內的常量要縮進
? ? ? ??void?foo() [#34]前面有縮進
5)?註解的聲明要縮進
? ? ? ??int?count()[#39]前面有縮進
6)?????方法/構造體內的語句要縮進
? ? ? ??方法foo和bar內的語句[#16 ~ #22, #26 ~ #28]都有
縮進
7)?????程序塊內的語句要縮進
? ? ? ??for循環內的v.add(new?Integer(i))[#27]有縮進
8)?????switch內的語句要縮進
? ? ? ? switch內的語句[#17 ~ #21]相對switch有縮進
9)?????case內的語句要縮進
? ? ? ??Other.doFoo()[#18]相對於case;Other.doBaz()
[#21]相對於default都有縮進
10)??break語句要縮進
? ? ? ??break[#19]相對於case有縮進
11)??空白行不用縮進
? ? ? ??域和方法之間的空白行[#8, #10, #12, #14, #24]是
沒有縮進的
3、大括號(Braces)的位置
3.1 示例代碼
[java]?view plaincopy
/**?
?*?Braces?
?*/??
interface?Empty?{??
}??
???
enum?MyEnum?{??
????UNDEFINED(0)?{??
????????void?foo()?{??
????????}??
????}??
}??
???
@interfaceSomeAnnotationType?{??
}??
???
class?Example?{??
????SomeClass?fField?=?new?SomeClass()?{??
????};??
???
????int[]?myArray?=?{??
????????????1,?2,?3,?4,?5,?6??
????};??
???
????int[]?emptyArray?=?new?int[]?{};??
???
????Example()?{??
????}??
???
????void?bar(int?p)?{??
????????for?(int?i?=?0;?i?<10;?i++)?{??
????????}??
????????switch?(p)?{??
????????????case?0:??
????????????????fField.set(0);??
????????????????break;??
????????????case?1:?{??
????????????????break;??
????????????}??
????????????default:??
????????????????fField.reset();??
????????}??
????}??
}??
???java
?
3.2? 規則說明
1)類或接口的聲明跟左大括號在同一行上
#4 Empty以及 #17 Example後面{的位置
2)?????匿名類的聲明跟左大括號在同一行上
? ? ? ??#18 SomeClass後面{的位置
3)?????構造體的聲明跟左大括號在同一行上
? ? ? ??#27 Example()後面{的位置
4)?????方法的聲明跟左大括號在同一行上
? ? ? ??#9 foo和#30 bar後面{的位置
5)?????枚舉的聲明跟左大括號在同一行上
? ? ? ??#7 MyEnum 後面{的位置
6)?????枚舉常量體跟左大括號在同一行上
? ? ? ??#8 UNDEFINED(0) 後面{的位置
7)?????註解類型的聲明跟左大括號在同一行上
? ? ? ??#14 SomeAnnotationType後面{的位置
8)?????程序塊跟左大括號在同一行上
? ? ? ??#31 for後面{的位置
9)?????case語句中的程序塊跟左大括號在同一行上
? ? ? ??#37 case 1後面{的位置
10)??switch語句跟左大括號在同一行上
? ? ? ??#33 switch後面{的位置
11)??數組的初始化常量跟左大括號在同一行上
? ? ? ? #21和#25 {的位置
?
?
4、空格(White Space)
?
4.1 聲明
?
4.1.1 類
?
[java]?view plaincopy
class?MyClass?implements?I0,?I1,?I2?{??
}??
???
AnonClass?=?new?AnonClass()?{??
????void?foo(Some?s)?{??
????}??
};??
·????????類的左大括號的前面加空格;
·????????匿名類的左大括號的前面加空格;
·????????implements語句中逗號的前面,不加空格;
·????????implements語句中逗號的後面,加上空格;
?
4.1.2 域
?
[java]?view plaincopy
int?a?=?0,?b?=?1,?c=?2,?d?=?3;??
?
·????????多個域聲明中逗號的前面,不加空格;
·????????多個域聲明中逗號的後面,加上空格。
?
4.1.3 臨時變量
?
[java]?view plaincopy
int?a?=?0,?b?=?1,?c=?2,?d?=?3;??
?
·????????多個臨時變量聲明中逗號的前面,不加空格;
·????????多個臨時變量聲明中逗號的後面,加上空格;
?
4.1.4 構造體
[java]?view plaincopy
MyClass()?throws?E0,?E1?{??
????this(0,?0,?0);??
}??
???
MyClass(int?x,?int?y,?int?z)?throws?E0,?E1?{??
????super(x,?y,?z,?true);??
}??android
·????????左小括號的前面,不加空格;
·????????左小括號的後面,不加空格;
·????????右小括號的前面,不加空格;
·????????小括號內爲空,則它們之間不加空格;
·????????左大括號前面,加上空格;
·????????參數列表中逗號以前,不加空格;
·????????參數列表中逗號以後,加上空格;
·????????throws語句中逗號以前,不加空格;
·????????throws語句中逗號以後,加上空格。
?
4.1.5 方法
?
[java]?view plaincopy
void?foo()?throws?E0,?E1?{??
};??
???
void?bar(int?x,?int?y)?throws?E0,?E1?{??
}??
???
void?format(Strings,?Object...?args)?{??
}??
·????????左小括號的前面,不加空格;
·????????左小括號的後面,不加空格;
·????????右小括號的前面,不加空格;
·????????小括號內爲空,則它們之間不加空格;
·????????左大括號前面,加上空格;
·????????參數列表中逗號以前,不加空格;
·????????參數列表中逗號以後,加上空格;
·????????可變參數列表省略號以前,不加空格;
·????????可變參數列表省略號以後,加上空格;
·????????throws語句中逗號以前,不加空格;
·????????throws語句中逗號以後,加上空格。
?
4.1.6 標號
?
[java]?view plaincopy
label:?for?(int?i?=?0;?i?<?list.length;?i++)?{??
????for?(int?j?=?0;?j?<?list[i].length;?j++)??
????????continue?label;??
}??
·????????冒號以前,不加空格;
·????????冒號以後,加上空格
?
4.1.7 註解/Annotation
?
[java]?view plaincopy
@Annot(x?=?23,?y?=?-3)??
public?class?A?{??
}??
·????????‘@’以後,不加空格;
·????????左小括號的前面,不加空格;
·????????左小括號的後面,不加空格;
·????????逗號前面,不加空格;
·????????逗號後面,加上空格;
·????????右小括號的前面,不加空格
?
4.1.8 枚舉/Enumtypes
?
[java]?view plaincopy
enum?MyEnum?{??
????GREEN(0,?1),?RED()?{??
????????void?process()?{??
????????}??
????}??
}??
·????????聲明中左大括號的前面[#1],加上空格;
·????????常量之間的逗號[#2 RED前]前面,不加空格;
·????????常量之間的逗號[#2 RED前]後面,加上空格;
·????????常量參數的左小括號[#2 GREEN後]前面,不加空格
;
·????????常量參數的左小括號[#2 GREEN後]後面,不加空格
;
·????????常量參數的小括號[#2 RED後]中間爲空,括號之間
不加空格;
·????????常量參數之間的逗號[#2 GREEN()裏面]前面,不加
空格;
·????????常量參數之間的逗號[#2 GREEN()裏面]後面,加上
空格;
·????????常量參數的右小括號[#2 GREEN()後]前面,不加空
格;
·????????常量體左大括號[#2 RED後]前面,加上空格。
?
4.1.9 註解類型/Annotationtypes
?
[java]?view plaincopy
@interface?MyAnnotation?{??
????String?value();??
}??
???
@interface?OtherAnnotation?{??
}??
·????????‘@’以前,不加空格;
·????????‘@’以後,不加空格
·????????左大括號的前面,加上空格;
·????????註解類型成員的左小括號的前面,不加空格;
·????????註解類型成員的小括號的之間,不加空格;
?
4.2 控制語句
?
4.2.1 程序塊
?
[java]?view plaincopy
if?(true)?{??
????return?1;??
}?else?{??
????return?2;??
}??
·????????左大括號前面,加上空格;
·????????右大括號後面,加上空格。
?
4.2.2 if else語句
?
[java]?view plaincopy
if?(condition)?{??
????return?foo;??
}?else?{??
????return?bar;??
}??
·????????左小括號前加上空格;
·????????左小括號後不加空格;
·????????右小括號前不加空格【左大括號前的空格是規則
#4.2.1】
?
4.2.3 for語句
?
[java]?view plaincopy
for?(int?i?=?0,?j?=?array.length;?i?<?array.length;?i
++,?j--)?{??
}??
for?(String?s?:?names)?{??
}??
·????????左小括號前加上空格;
·????????左小括號後不加空格;
·????????右小括號前不加空格【左大括號前的空格是規則
#4.2.1】
·????????初始化語句的逗號前不加空格;
·????????初始化語句的逗號後加上空格
·????????增量語句的逗號前不加空格;
·????????增量語句的逗號後加上空格
·????????語句之間的分號前不加空格;
·????????語句之間的分號後加上空格;
·????????冒號前面加上空格;
·????????冒號後面加上空格。
?
4.2.4 switch語句
?
[java]?view plaincopy
switch?(number)?{??
????case?RED:??
????????return?GREEN;??
????case?GREEN:??
????????return?BLUE;??
????case?BLUE:??
????????return?RED;??
????default:??
????????return?BLACK;??
}??
· ? ? ? ?case和default的冒號(‘:’)前不加空格;
·????????左括號(‘(’)和左大括號(‘{’)前都加上空
格;
·????????左括號(‘(’)後和右括號(‘)’)前都不加空
格。
?
4.2.5 while和dowhile語句
?
[java]?view plaincopy
while?(condition)?{??
}??
;??
do?{??
}?while?(condition);??
·????????左括號前加上空格;
·????????左括號後不加空格;
·????????右括號前不加空格【#1左大括號前的空格是規則
#4.2.1】
?
4.2.6 同步(synchronized)語句
?
[java]?view plaincopy
synchronized?(list)?{??
????list.add(element);??
}??
·????????左括號前加上空格;
·????????左括號後不加空格;
·????????右括號前不加空格【左大括號前的空格是規則
#4.2.1】
?
4.2.7 catch語句
?
[java]?view plaincopy
try?{??
????number?=?Integer.parseInt(value);??
}?catch?(NumberFormatException?e)?{??
}??
·????????左括號前加上空格;
·????????左括號後不加空格;
·????????右括號前不加空格【左大括號前的空格是規則
#4.2.1】
?
4.2.8 assert語句
?
[java]?view plaincopy
assert?condition?:?reportError();??
?
冒號先後都加上空格
?
4.2.9 return語句
?
[java]?view plaincopy
return?(o);??
?
括號表達式前加上空格
?
4.2.10 throw語句
?
[java]?view plaincopy
throw?(e);??
?
括號表達式前加上空格
?
4.3 表達式
?
4.2.1 函數調用
?
[java]?view plaincopy
foo();??
bar(x,?y);??
???
String?str?=?new?String();??
Point?point?=?new?Point(x,?y);??
???
MyClass()?throws?E0,?E1?{??
????this(0,?0,?0);??
}??
???
MyClass(int?x,?int?y,?int?z)?throws?E0,?E1?{??
????super(x,?y,?z,?true);??
}??
·????????左括號的先後都不加空格;
·????????右括號前不加空格;
·????????空的參數的左右括號之間不加空格;
·????????方法調用時多個參數之間分割的逗號前面不加空格
,逗號後面加空格;
·????????對象申請時多個參數之間分割的逗號前面不加空格
,逗號後面加空格;
·????????顯示調用構造函數時多個參數之間分割的逗號前面
不加空格,逗號後面加空格;
?
4.3.2 賦值
?
[java]?view plaincopy
List?list?=?new?ArrayList();??
int?a?=?-4?+?-9;??
b?=?a++?/?--number;??
c?+=?4;??
boolean?value?=?true?&&?false;??
賦值操做(=)先後都加上空格。【注意:‘+=’是一個操做
數】
?
4.3.3 操做數
?
[java]?view plaincopy
List?list?=?new?ArrayList();??
int?a?=?-4?+?-9;??
b?=?a++?/?--number;??
c?+=?4;??
boolean?value?=?true?&&?false;??
·????????二元操做(#2的‘+’;#3的‘/’;#5的‘&&’)
先後都加上空格;
·????????一元操做(#2 ‘4’和‘9’前面的‘-’)先後都
不加空格【示例中‘-’前的空格不是這個規則裏的】;
·????????前置操做的(#3的‘--number’)先後都不加空格
【示例中‘--’前的空格不是這個規則裏的】;
·????????後置操做的(#3的‘a++’)先後都不加空格【示
例中‘++’後的空格不是這個規則裏的】。
?
4.3.4 加括號的表達式
?
[java]?view plaincopy
result?=?(a?*?(b?+?c?+?d)?*?(e?+?f));??
?
左括號前,左括號後和右括號前都不加空格【示例中左括號前
的空格不是這個規則裏的】
?
4.3.5 類型轉換
?
[java]?view plaincopy
String?s?=?((String)?object);??
?
·????????右括號後加上空格;
·????????左括號後和右括號前都不加空格。
?
4.3.6 三元條件表達式
?
[java]?view plaincopy
String?value?=?condition???TRUE?:?FALSE;??
?
問號前,問號後,冒號前,冒號後都要加上空格
?
4.4 數組
?
?
[java]?view plaincopy
int[]?array0?=?new?int[]?{};??
int[]?array1?=?new?int[]?{??
????????1,?2,?3??
};??
int[]?array2?=?new?int[3];??
???
array[i].foo();??
?
4.4.1 聲明
·????????左中括號前不加空格;
·????????左右中括號中間不加空格
示例中:arrayX前的‘[]’
?
4.4.2 申請
·????????左中括號先後都不加空格;
·????????右中括號前不加空格;
·????????空的左右中括號中間不加空格;
示例中:等號‘=’後面的‘[]’
?
4.4.3 初始化體
·????????左大括號先後都加上空格;
·????????右大括號前加上空格;
·????????逗號前不加空格;
·????????逗號後加上空格;
·????????空的大括號中間不加空格
?
4.4.4 數組元素的訪問
·????????左中括號先後都不加空格;
·????????右中括號前面不加空格
?
4.5 泛型
?
[java]?view plaincopy
Map<String,?Element>?map?=?newHashMap<String,?
Element>();??
???
x.<String,?Element>?foo();??
???
classMyGenericType<S,?T?extends?Element?&?List>?{??
}??
???
Map<X<?>,?Y<??extendsK,???super?V>>?t;??
?
?
5、空白行(BlankLines)
?
5.1 示例代碼
?
[java]?view plaincopy
/**?
?*?Blank?Lines?
?*/??
???
package?foo.bar.baz;??
???
import?java.util.List;??
import?java.util.Vector;??
???
import?java.net.Socket;??
???
public?class?Another?{??
}??
???
public?class?Example?{??
????public?static?class?Pair?{??
????????public?String?first;??
???
????????public?String?second;??
????????//?Between?here...??
???
????????//?...and?here?are?10?blank?lines??
????};??
???
????private?LinkedList?fList;??
???
????public?int?counter;??
???
????publicExample(LinkedList?list)?{??
????????fList?=?list;??
????????counter?=?0;??
????}??
???
????public?void?push(Pair?p)?{??
????????fList.add(p);??
????????++counter;??
????}??
???
????public?Object?pop()?{??
????????--counter;??
????????return?(Pair)fList.getLast();??
????}??
}??
???express
?
5.2 規則說明
?
5.2.1 編譯單元之間的空白行
1)?????包聲明以前有一空白行[#4]
2)?????包聲明以後有一空白行[#6]
3)?????import聲明以前有一空白行[#6]
4)?????import各個分組之間有一空白行[#9]
5)?????import聲明以後有一空白行[#11]
6)?????類聲明之間有一空白行[#14]
?
5.2.2 類內部的空白行
1)?????第一個聲明之間無空白行[#15 & #16之間]
2)?????相同分類聲明以前有一空白行[#24, #28]
3)?????成員類聲明以前有一空白行
4)?????域聲明以前有一空白行[#18, #24, #26]
5)????? 方法聲明以前有一空白行[#28,#33, #38]??????????
6)????? 方法內的開始處沒有空白行[#29和#30之間;#34與
#35之間;#39與#40之間]
?
?
6、插入新行(NewLines)
?
6.1 示例代碼
?
[java]?view plaincopy
/**?
?*?New?Lines?
?*/??
public?class?Empty?{??
}??
???
class?Example?{??
????static?int[]?fArray?=?{??
????????????1,?2,?3,?4,?5??
????};??
???
????Listener?fListener?=?new?Listener()?{??
????};??
???
????@Deprecated??
????@Override??
????public?void?bar(@SuppressWarnings("unused")?int?
i)?{??
????????@SuppressWarnings("unused")??
????????int?k;??
????}??
???
????void?foo()?{??
????????;??
????????;??
????????label:?do?{??
????????}?while?(false);??
????????for?(;;)?{??
????????}??
????}??
}??
???
enum?MyEnum?{??
????UNDEFINED(0)?{??
????}??
}??
???
enum?EmptyEnum?{??
}??
???
@interface?EmptyAnnotation{??
}??
???
?
6.2 規則說明
?
6.2.1 插入新行
1)?????類體內爲空,插入新行[#5是另起的一行]
2)?????匿名類體內爲空,插入新行[#13是另起的一行]
3)?????方法內爲空,插入新行
4)?????空的程序塊,插入新行[#26是另起的一行;#28是另起
的一行]
5)?????標號後面不插入新行[#25 do與label在同一行]
6)?????在空的枚舉聲明中,插入新行[#38是另起的一行]
7)?????在空的枚舉常量體中,插入新行[#34是另起的一行]
8)?????在空的註解體中,插入新行[#41是另起的一行]
9)?????在文件結尾,插入新行[#42是另起的一行]
?
6.2.2 數組初始化
1)?????數組初始化體的左大括號後,插入新行[#9是另起的一
行]
2)?????數組初始化體的右大括號前,插入新行[#10是另起的
一行]
?
6.2.3 空的語句
空的語句放在新行上[#24是另起的一行]
?
6.2.4 註解
1)?????對成員的註解以後,插入新行[#16 & #17都是另起的
一行]
2)?????對參數的註解以後,不插入新行[#17 int i與
@SuppressWarnings("unused")在同一行]
3)?????對臨時變量的註解以後,插入新行[#19是另起的一行]
?
?
7、控制語句(ControlStatements)
?
7.1 示例代碼
?
[java]?view plaincopy
/**?
?*?If...else?
?*/??
class?Example?{??
????void?bar()?{??
????????do?{??
????????}?while?(true);??
????????try?{??
????????}?catch?(Exception?e)?{??
????????}?finally?{??
????????}??
????}??
???
????void?foo2()?{??
????????if?(true)?{??
????????????return;??
????????}??
????????if?(true)?{??
????????????return;??
????????}?else?if?(false)?{??
????????????return;??
????????}?else?{??
????????????return;??
????????}??
????}??
???
????void?foo(int?state)?{??
????????if?(true)??
????????????return;??
????????if?(true)??
????????????return;??
????????else?if?(false)??
????????????return;??
????????else??
????????????return;??
????}??
}??
???
?
7.2 規則說明
?
1)?????if語句的else以前,不插入新行[#20& #22的else與‘
}’在同一行]
2)?????try語句的catch以前,不插入新行[#9的catch與‘}’
在同一行]
3)?????try語句的finally以前,不插入新行[#10的finally與
‘}’在同一行]
4)?????do語句的while以前,不插入新行[#7的while與‘}’
在同一行]
5)?????#29的‘then’語句與#28的if在不一樣行,#31的‘then
’語句與#30的if在不一樣行;
6)?????#35的else語句與#34的else在不一樣行;
7)?????#20和#32的else if中‘else與‘if’在同一行;
8)?????‘return’或‘throw’語句不須要在一行上[#16與
#15在兩行上]
?
?
8、換行(LineWrapping)
?
8.1 總則
?每行最多100個字符;
?超過100個字符的行要換行,新行缺省縮進2個縮進單位。一
個縮進單位是4個空格,因此這裏總共縮進8個空格。
?缺省數組初始化值缺省縮進2個縮進單位。
?
8.2 註解(Annotation)
[java]?view plaincopy
/**?
?*?Element-value?pairs?
?*/??
@MyAnnotation(value1?=?"this?isan?example",?value2?
=?"of?an?annotation",?value3?=?"withseveral?
arguments",?value4?=?"by?Haili?TIAN?
(haili.tian@gmail.com)")??
class?Example?{??
}??
註解不換行:value一、value二、value3和value4都在同一行上
。
?
8.3 類聲明
?
[java]?view plaincopy
/**?
?*?'extends'?clause?
?*/??
class?Example?extends??
????????OtherClass?{??
}??
???
/**?
?*?'implements'?clause?
?*/??
class?Example?implements?I1,??
????????I2,?I3?{??
}??
???
?extends子句在須要換行的地方,用缺省換行方式換行:
#5OtherClass處換行,且OtherClass相對class縮進了8個空格
;
?implements子句在須要換行的地方,用缺省換行方式換行:
#12I2處換行,且I2相對class縮進了8個空格。
?
?
8.4 構造體聲明
?
[java]?view plaincopy
/**?
?*?Parameters?
?*/??
class?Example?{??
????Example(int?arg1,?int?arg2,??
????????????int?arg3,?int?arg4,??
????????????int?arg5,?int?arg6)?{??
????????this();??
????}??
???
????Example()?{??
????}??
}??
???
/**?
?*?'throws'?clause?
?*/??
class?Example?{??
????Example()?throws?FirstException,??
????????????SecondException,??
????????????ThirdException?{??
????????returnOther.doSomething();??
????}??
}??
???
?構造體的參數在須要換行的地方,用缺省換行方式換行:參
數[#6 ]相對Example[#5]縮進了8個空格;
?構造體throws子句在須要換行的地方,用缺省換行方式換行
:子句[#20& #21]相對Example[#19]縮進了8個空格。
?
?
8.5 方法聲明
?
[java]?view plaincopy
/**?
?*?Declaration?
?*/??
class?Example?{??
????public?final?synchronizedjava.lang.String?
a_method_with_a_long_name()?{??
????}??
}??
???
/**?
?*?Parameters?
?*/??
class?Example?{??
????void?foo(int?arg1,?int?arg2,??
????????????int?arg3,?int?arg4,??
????????????int?arg5,?int?arg6)?{??
????}??
}??
???
/**?
?*?'throws'?clause?
?*/??
class?Example?{??
????int?foo()?throws?FirstException,??
????????????SecondException,??
????????????ThirdException?{??
????????returnOther.doSomething();??
????}??
}??
???
?方法聲明處不換行:#5 很長,但不分行;
?方法聲明處的參數在須要換行的地方,用缺省換行方式換行
:參數[#14& #15]相對voidfoo [#13]縮進了8個空格;
?方法聲明處的throws子句在須要換行的地方,用缺省換行方
式換行:子句[#24& #25]相對intfoo [#23]縮進了8個空格。
?
?
8.6 枚舉聲明
?
[java]?view plaincopy
/**?
?*?Constants?
?*/??
enum?Example?{??
????CANCELLED,?RUNNING,?WAITING,?FINISHED??
}??
???
enum?Example?{??
????GREEN(0,?255,?0),?RED(??
????????????255,?0,?0)??
}??
???
/**?
?*?'implements'?clause?
?*/??
enum?Example?implements?A,?B,??
????????C?{??
}??
???
/**?
?*?Constant?arguments?
?*/??
enum?Example?{??
????GREEN(0,?255,?0),?RED(??
????????????255,?0,?0)??
}??
???
?枚舉常量定義的地方,不換行:#5不換行;
?implements子句在須要換行的地方,用缺省換行方式換行:
#17 C處換行,且C相對enum縮進了8個空格;
?常量參數在須要換行的地方,用缺省換行方式換行:#10 和
#25處換行,且相對GREEN縮進了8個空格。
?
?
8.7 函數調用
?
[java]?view plaincopy
/**?
?*?Arguments?
?*/??
class?Example?{??
????void?foo()?{??
????????Other.bar(??
????????????????100,??
????????????????nested(200,?300,?400,??
????????????????????????500,?600,?700,??
????????????????????????800,?900));??
????}??
}??
???
/**?
?*?Qualified?invocations?
?*/??
class?Example?{??
????int?foo(Some?a)?{??
????????return?a.getFirst();??
????}??
}??
???
/**?
?*?Explicit?constructor?invocations?
?*/??
class?Example?extends?AnotherClass?{??
????Example()?{??
????????super(100,?200,?300,400,?500,??
????????????????600,?700);??
????}??
}??
???
/**?
?*?Object?allocation?arguments?
?*/??
class?Example?{??
????SomeClass?foo()?{??
????????return?new?SomeClass(100,200,??
????????????????300,?400,?500,?600,??
????????????????700,?800,?900);??
????}??
}??
???
/**?
?*?Qualified?object?allocation?arguments?
?*/??
class?Example?{??
????SomeClass?foo()?{??
????????return?SomeOtherClass.new?SomeClass(??
????????????????100,?200,?300,?400,?500);??
????}??
}??
???
?函數調用參數處,在須要換行的地方,用缺省換行方式換行
:#7, #8和#9, #10處換行,且#7,#8相對Other.bar縮進了8個
空格, #9, #10相對nested縮進了8個空格;
?對象的方法調用處,在須要換行的地方,用缺省換行方式換
行:#19這個例子不太好,若是這句很長,能夠在a和getFirst
之間換行,且.放在getFirst前;
?顯示的構造函數調用處,在須要換行的地方,用缺省換行方
式換行:#29處換行,且相對#30的super縮進8個空格;
?對象建立參數處,在須要換行的地方,用缺省換行方式換行
:#39, #40處換行,且相對#38的return縮進8個空格;
?對象方法構造對象參數處,在須要換行的地方,用缺省換行
方式換行:#50處換行,且相對#49的return縮進8個空格.
?
?
8.8 表達式
?
[java]?view plaincopy
/**?
?*?Binary?expressions?
?*/??
class?Example?extends?AnotherClass?{??
????int?foo()?{??
????????int?sum?=?100?+?200?+?300?+?400??
????????????????+?500?+?600?+?700?+?800;??
????????int?product?=?1?*?2?*?3?*?4?*?5??
????????????????*?6?*?7?*?8?*?9?*?10;??
????????boolean?val?=?true?&&?false??
????????????????&&?true?&&?false??
????????????????&&?true;??
????????return?product?/?sum;??
????}??
}??
???
/**?
?*?Conditionals?
?*/??
class?Example?extends?AnotherClass?{??
????int?Example(boolean?Argument)?{??
????????return?argument??100000??
????????????????:?200000;??
????}??
}??
???
/**?
?*?Array?initializers?
?*/??
class?Example?{??
????int[]?fArray?=?{??
????????????1,?2,?3,?4,?5,?6,?7,?8,?9,??
????????????10,?11,?12??
????};??
}??
???
/**?
?*?Assignments?
?*/??
class?Example?{??
????private?static?final?String?string?
="TextTextText";??
???
????void?foo()?{??
????????for?(int?i?=?0;?i?<10;?i++)?{??
????????}??
????????String?s;??
????????s?=?"TextTextText";??
????}??
}??
???
?二元表達式,在須要換行的地方,用缺省換行方式換行:#7,
#9和#11,#12處換行,且#7相對int?sum縮進了8個空格,且#9
相對int?product縮進了8個空格,且#11& #12相對boolean?
val縮進了8個空格;
?三元條件表達式,除了第一個元素,用缺省換行方式換行所
有其餘元素:#22& #23;
?數組初始化體,在須要換行的地方,用缺省換行方式換行:
#32 !處換行,且#32& #33相對int[] fArray縮進了8個空
格;
?賦值語句,不須要換行:#41行很長也不須要換行。
?
?
8.9 語句
?
[java]?view plaincopy
/**?
?*?Compact?'if?else'?
?*/??
class?Example?{??
????int?foo(int?argument)?{??
????????if?(argument?==?0)??
????????????return?0;??
????????if?(argument?==?1)??
????????????return?42;??
????????else??
????????????return?43;??
????}??
}??
???
配置起什麼用,沒看懂!
?
?
9、註釋(Comments)
?
?
[java]?view plaincopy
??
[java]?view plaincopy
/**?
?*?An?example?for?comment?formatting.?This?example?
is?meant?to?illustrate?the?various?possibilities?
offered?by?<i>Haili?TIAN</i>?in?order?to?format?
comments.?
?*/??
???
package?mypackage;??
???
/**?
?*?This?is?the?comment?for?the?example?interface.?
?*/??
interface?Example?{??
????//?This?is?a?long?comment?with?white?space?that?
should?be?split?in?multiple??
????//?line?comments?in?case?the?linecomment?
formatting?is?enabled??
????int?foo3();??
?????
//????void?commented()?{??
//????????System.out.println("indented");??
//????}??
???
????//?void?indentedCommented()?{??
????//?System.out.println("indented");??
????//?}??
???
????/*?block?comment?on?first?column?*/??
????int?bar();??
???
????/*?
?????*?These?possibilities?
include:<ul><li>Formatting?of?header?
?????*?comments.</li><li>Formatting?of?Javadoc?
tags</li></ul>?
?????*/??
????int?bar2();?//?This?is?along?comment?that?should?
be?split?in?multiple?line??
????????????????//?comments?in?case?the?linecomment?
formatting?is?enabled??
???
????/**?
?????*?The?following?is?some?sample?code?
whichillustrates?source?formatting?
?????*?within?javadoc?comments:?
?????*?
?????*?<pre>?
?????*?public?class?Example?{?
?????*????final?int?a?=?1;?
?????*?
?????*????final?boolean?b?=?true;?
?????*?}?
?????*?</pre>?
?????*?
?????*?Descriptions?of?parameters?and?returnvalues?
are?best?appended?at?end?of?
?????*?the?javadoc?comment.?
?????*?
?????*?@param?a?The?first?parameter.?For?an?optimum?
result,?this?should?be?an?
?????*????????????odd?number?between?0?and?100.?
?????*?@param?b?The?second?parameter.?
?????*?@return?The?result?of?the?foo?operation,?
usually?within?0?and?1000.?
?????*/??
????int?foo(int?a,?int?b);??
}??
?註釋每行長度是80個字符;
?開啓對Javadoc註釋的格式化;
? 用html的TAG;
? 開啓對‘pre’TAG裏的Java代碼片斷進行格式化;
?
#37 ~ #43
?
? Javadoc TAG前面插入空白行;
?
#47是插入的行
?
? Javadoc Tag縮進
§?‘@param’TAG後面的描述縮進
?
#49的odd相對#48的a縮進了4個空格。
?
? 不對‘@param’TAG插入新行;
?
#48和#50的描述與參數在同一行。
?
? ‘/**’和‘*/’在不一樣的行;
? 移除空白行;
?
Javadoc註釋形式見#33~ #52
?
?開啓對塊註釋的格式化;
? ‘/*’和‘*/’在不一樣的行;
? 移除空白行;
?
塊註釋形式見#26~ #29
?
?開啓對行註釋的格式化;
? 註釋在行的第一列
?
#15, #16 和#17是行註釋,且‘//’與原程序之間的空格仍舊
保持。
?
?關閉對頭註釋的格式化;
?
#1, #2和#3的頭註釋保持不變。
?
?關閉對塊註釋縮進到第一列;
?
#23是塊註釋,與程序有相同的縮進,不是縮進到第一列。
?
?關閉對行註釋縮進到第一列;
?
注:筆者對行註釋驗證,發現Eclipse中不管如何設置,基本
不會改變其行爲。
?
?
10、Android中XML文件的格式化
?
前面講了那麼多都是針對Java程序的,Android中有大量的XML
文件。對XML的格式也要進行排版格式化。
打開Window> Preferences,能夠經過兩個地方對XML文件進行
格式化:
1)?????XML > XML Files > Editor
對其中的各項設置進行配置
2)?????Android > Editors
對其中的各項設置進行配置
?
?
總結
本文分析了Android編碼風格在Eclipse環境中具體實施,通
過對Eclipse環境的配置能夠方便的格式化Android程序:Java
文件和XML文件,特別是Java文件,其配置是基於JDT實現的,
因此對Java的方方面面的配置都覆蓋了。
? ? ? ? 可是,只有這些還不夠,對通常的Java設計編碼原則
和Android中推薦的風格還不能徹底自動執行,還須要人的參
與,依賴於團隊風格規範的制定,成員的設計能力和領悟執行
能力。下面是這些工具所不能解決的風格和原則:
?
?對Exception的處理;
?寫短小的方法;
?域的命名規則;
?程序塊內的邏輯分組;
?等等。編程
百度搜不到的能夠找IT藍豹數組