Android代碼規(guī)范 ——轉(zhuǎn)發(fā)請(qǐng)表明出處《IT藍(lán)豹》:http://itlanbao.com/preview.aspx#1,0
十載的衡東網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都全網(wǎng)營(yíng)銷推廣的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整衡東建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)從事“衡東網(wǎng)站設(shè)計(jì)”,“衡東網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
[-]
一Import的次序
二縮進(jìn)Indentation
總則
示例代碼
規(guī)則說(shuō)明
三大括號(hào)Braces的位置
示例代碼
規(guī)則說(shuō)明
四空格White Space
聲明
申請(qǐng)
初始化體
數(shù)組元素的訪問(wèn)
函數(shù)調(diào)用
賦值
操作數(shù)
加括號(hào)的表達(dá)式
類型轉(zhuǎn)換
三元條件表達(dá)式
程序塊
if else語(yǔ)句
for語(yǔ)句
switch語(yǔ)句
while和dowhile語(yǔ)句
同步synchronized語(yǔ)句
catch語(yǔ)句
assert語(yǔ)句
return語(yǔ)句
throw語(yǔ)句
類
域
臨時(shí)變量
構(gòu)造體
方法
標(biāo)號(hào)
注解Annotation
枚舉Enumtypes
注解類型Annotationtypes
聲明
控制語(yǔ)句
表達(dá)式
數(shù)組
泛型
五空白行BlankLines
示例代碼
規(guī)則說(shuō)明
七控制語(yǔ)句ControlStatements
八換行LineWrapping
九注釋Comments
十Android中XML文件的格式化
總結(jié)
插入新行
數(shù)組初始化
空的語(yǔ)句
注解
示例代碼
規(guī)則說(shuō)明
總則
注解Annotation
類聲明
構(gòu)造體聲明
方法聲明
枚舉聲明
函數(shù)調(diào)用
表達(dá)式
語(yǔ)句
編譯單元之間的空白行
類內(nèi)部的空白行
示例代碼
規(guī)則說(shuō)明
六插入新行NewLines
Google對(duì)Android的編程規(guī)范在Code Style Guidelines for Contributors中做了描述,并在Android源碼中release了import和Java的配置文件android.importorder與android-formatting.xml。本文分析這些配置文件在Eclipse環(huán)境下格式化Android編碼規(guī)范都做了什么,在Java和XML文件中如何具體體現(xiàn)。
Android源碼目錄<android_src_root>/development/ide/eclipse/下有文件android.importorder和android-formatting.xml,可以在Eclipse中導(dǎo)入import次序及Java編碼風(fēng)格:
1)?????打開(kāi)Window > Preferences > Java > Code Style;
2)?????在Organizer Imports中點(diǎn)擊Imports,選擇android.importorder導(dǎo)入;
3)?????在Formatter中點(diǎn)擊Imports,選擇android-formatting.xml導(dǎo)入。
下面講解這些配置都做了什么,在代碼中如何具體體現(xiàn)的。
Google推薦的AndroidJava文件開(kāi)頭import的次序(按照先后)是:
com
org
android
java
javax
排列原則:
?這個(gè)次序也是根據(jù)看import語(yǔ)句的重要性來(lái)排定的:首先希望看到用了android里的哪些類;然后是其他第三方的;最后才關(guān)注標(biāo)準(zhǔn)Java庫(kù)里的。
?不同的import分組之間是有一個(gè)空白行,在5.2.1?4)中描述。
?同一import分組內(nèi)部按照字母次序排列。
縮進(jìn)只用空格,不用制表符(TAB)??s進(jìn)用4個(gè)空格,按下TAB鍵用4個(gè)空格代替。
?
?
[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;??
}??
???
1)????? 域不用對(duì)齊
? ? ? ??若對(duì)齊的話,則myArray,theInt, someString和aDouble都在同一列上對(duì)齊。
2)?????類體內(nèi)部的聲明全都縮進(jìn)
? ? ? ??Class Example內(nèi)的定義[#5 ~ #29]相對(duì)class?Example[#4]都有縮進(jìn)
3)?????枚舉的聲明要縮進(jìn)
? ? ? ??UNDEFINED(0) [#33]前面有縮進(jìn)
4)?????枚舉內(nèi)的常量要縮進(jìn)
? ? ? ??void?foo() [#34]前面有縮進(jìn)
5)?注解的聲明要縮進(jìn)
? ? ? ??int?count()[#39]前面有縮進(jìn)
6)?????方法/構(gòu)造體內(nèi)的語(yǔ)句要縮進(jìn)
? ? ? ??方法foo和bar內(nèi)的語(yǔ)句[#16 ~ #22, #26 ~ #28]都有縮進(jìn)
7)?????程序塊內(nèi)的語(yǔ)句要縮進(jìn)
? ? ? ??for循環(huán)內(nèi)的v.add(new?Integer(i))[#27]有縮進(jìn)
8)?????switch內(nèi)的語(yǔ)句要縮進(jìn)
? ? ? ? switch內(nèi)的語(yǔ)句[#17 ~ #21]相對(duì)switch有縮進(jìn)
9)?????case內(nèi)的語(yǔ)句要縮進(jìn)
? ? ? ??Other.doFoo()[#18]相對(duì)于case;Other.doBaz()[#21]相對(duì)于default都有縮進(jìn)
10)??break語(yǔ)句要縮進(jìn)
? ? ? ??break[#19]相對(duì)于case有縮進(jìn)
11)??空白行不用縮進(jìn)
? ? ? ??域和方法之間的空白行[#8, #10, #12, #14, #24]是沒(méi)有縮進(jìn)的
[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();??
????????}??
????}??
}??
???
?
1)類或接口的聲明跟左大括號(hào)在同一行上
#4 Empty以及 #17 Example后面{的位置
2)?????匿名類的聲明跟左大括號(hào)在同一行上
? ? ? ??#18 SomeClass后面{的位置
3)?????構(gòu)造體的聲明跟左大括號(hào)在同一行上
? ? ? ??#27 Example()后面{的位置
4)?????方法的聲明跟左大括號(hào)在同一行上
? ? ? ??#9 foo和#30 bar后面{的位置
5)?????枚舉的聲明跟左大括號(hào)在同一行上
? ? ? ??#7 MyEnum 后面{的位置
6)?????枚舉常量體跟左大括號(hào)在同一行上
? ? ? ??#8 UNDEFINED(0) 后面{的位置
7)?????注解類型的聲明跟左大括號(hào)在同一行上
? ? ? ??#14 SomeAnnotationType后面{的位置
8)?????程序塊跟左大括號(hào)在同一行上
? ? ? ??#31 for后面{的位置
9)?????case語(yǔ)句中的程序塊跟左大括號(hào)在同一行上
? ? ? ??#37 case 1后面{的位置
10)??switch語(yǔ)句跟左大括號(hào)在同一行上
? ? ? ??#33 switch后面{的位置
11)??數(shù)組的初始化常量跟左大括號(hào)在同一行上
? ? ? ? #21和#25 {的位置
?
?
?
?
?
[java]?view plaincopy
class?MyClass?implements?I0,?I1,?I2?{??
}??
???
AnonClass?=?new?AnonClass()?{??
????void?foo(Some?s)?{??
????}??
};??
·????????類的左大括號(hào)的前面加空格;
·????????匿名類的左大括號(hào)的前面加空格;
·????????implements語(yǔ)句中逗號(hào)的前面,不加空格;
·????????implements語(yǔ)句中逗號(hào)的后面,加上空格;
?
?
[java]?view plaincopy
int?a?=?0,?b?=?1,?c=?2,?d?=?3;??
?
·????????多個(gè)域聲明中逗號(hào)的前面,不加空格;
·????????多個(gè)域聲明中逗號(hào)的后面,加上空格。
?
?
[java]?view plaincopy
int?a?=?0,?b?=?1,?c=?2,?d?=?3;??
?
·????????多個(gè)臨時(shí)變量聲明中逗號(hào)的前面,不加空格;
·????????多個(gè)臨時(shí)變量聲明中逗號(hào)的后面,加上空格;
?
[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);??
}??
·????????左小括號(hào)的前面,不加空格;
·????????左小括號(hào)的后面,不加空格;
·????????右小括號(hào)的前面,不加空格;
·????????小括號(hào)內(nèi)為空,則它們之間不加空格;
·????????左大括號(hào)前面,加上空格;
·????????參數(shù)列表中逗號(hào)之前,不加空格;
·????????參數(shù)列表中逗號(hào)之后,加上空格;
·????????throws語(yǔ)句中逗號(hào)之前,不加空格;
·????????throws語(yǔ)句中逗號(hào)之后,加上空格。
?
?
[java]?view plaincopy
void?foo()?throws?E0,?E1?{??
};??
???
void?bar(int?x,?int?y)?throws?E0,?E1?{??
}??
???
void?format(Strings,?Object...?args)?{??
}??
·????????左小括號(hào)的前面,不加空格;
·????????左小括號(hào)的后面,不加空格;
·????????右小括號(hào)的前面,不加空格;
·????????小括號(hào)內(nèi)為空,則它們之間不加空格;
·????????左大括號(hào)前面,加上空格;
·????????參數(shù)列表中逗號(hào)之前,不加空格;
·????????參數(shù)列表中逗號(hào)之后,加上空格;
·????????可變參數(shù)列表省略號(hào)之前,不加空格;
·????????可變參數(shù)列表省略號(hào)之后,加上空格;
·????????throws語(yǔ)句中逗號(hào)之前,不加空格;
·????????throws語(yǔ)句中逗號(hào)之后,加上空格。
?
?
[java]?view plaincopy
label:?for?(int?i?=?0;?i?<?list.length;?i++)?{??
????for?(int?j?=?0;?j?<?list[i].length;?j++)??
????????continue?label;??
}??
·????????冒號(hào)之前,不加空格;
·????????冒號(hào)之后,加上空格
?
?
[java]?view plaincopy
@Annot(x?=?23,?y?=?-3)??
public?class?A?{??
}??
·????????‘@’之后,不加空格;
·????????左小括號(hào)的前面,不加空格;
·????????左小括號(hào)的后面,不加空格;
·????????逗號(hào)前面,不加空格;
·????????逗號(hào)后面,加上空格;
·????????右小括號(hào)的前面,不加空格
?
?
[java]?view plaincopy
enum?MyEnum?{??
????GREEN(0,?1),?RED()?{??
????????void?process()?{??
????????}??
????}??
}??
·????????聲明中左大括號(hào)的前面[#1],加上空格;
·????????常量之間的逗號(hào)[#2 RED前]前面,不加空格;
·????????常量之間的逗號(hào)[#2 RED前]后面,加上空格;
·????????常量參數(shù)的左小括號(hào)[#2 GREEN后]前面,不加空格;
·????????常量參數(shù)的左小括號(hào)[#2 GREEN后]后面,不加空格;
·????????常量參數(shù)的小括號(hào)[#2 RED后]中間為空,括號(hào)之間不加空格;
·????????常量參數(shù)之間的逗號(hào)[#2 GREEN()里面]前面,不加空格;
·????????常量參數(shù)之間的逗號(hào)[#2 GREEN()里面]后面,加上空格;
·????????常量參數(shù)的右小括號(hào)[#2 GREEN()后]前面,不加空格;
·????????常量體左大括號(hào)[#2 RED后]前面,加上空格。
?
?
[java]?view plaincopy
@interface?MyAnnotation?{??
????String?value();??
}??
???
@interface?OtherAnnotation?{??
}??
·????????‘@’之前,不加空格;
·????????‘@’之后,不加空格
·????????左大括號(hào)的前面,加上空格;
·????????注解類型成員的左小括號(hào)的前面,不加空格;
·????????注解類型成員的小括號(hào)的之間,不加空格;
?
?
?
[java]?view plaincopy
if?(true)?{??
????return?1;??
}?else?{??
????return?2;??
}??
·????????左大括號(hào)前面,加上空格;
·????????右大括號(hào)后面,加上空格。
?
?
[java]?view plaincopy
if?(condition)?{??
????return?foo;??
}?else?{??
????return?bar;??
}??
·????????左小括號(hào)前加上空格;
·????????左小括號(hào)后不加空格;
·????????右小括號(hào)前不加空格【左大括號(hào)前的空格是規(guī)則#4.2.1】
?
?
[java]?view plaincopy
for?(int?i?=?0,?j?=?array.length;?i?<?array.length;?i++,?j--)?{??
}??
for?(String?s?:?names)?{??
}??
·????????左小括號(hào)前加上空格;
·????????左小括號(hào)后不加空格;
·????????右小括號(hào)前不加空格【左大括號(hào)前的空格是規(guī)則#4.2.1】
·????????初始化語(yǔ)句的逗號(hào)前不加空格;
·????????初始化語(yǔ)句的逗號(hào)后加上空格
·????????增量語(yǔ)句的逗號(hào)前不加空格;
·????????增量語(yǔ)句的逗號(hào)后加上空格
·????????語(yǔ)句之間的分號(hào)前不加空格;
·????????語(yǔ)句之間的分號(hào)后加上空格;
·????????冒號(hào)前面加上空格;
·????????冒號(hào)后面加上空格。
?
?
[java]?view plaincopy
switch?(number)?{??
????case?RED:??
????????return?GREEN;??
????case?GREEN:??
????????return?BLUE;??
????case?BLUE:??
????????return?RED;??
????default:??
????????return?BLACK;??
}??
· ? ? ? ?case和default的冒號(hào)(‘:’)前不加空格;
·????????左括號(hào)(‘(’)和左大括號(hào)(‘{’)前都加上空格;
·????????左括號(hào)(‘(’)后和右括號(hào)(‘)’)前都不加空格。
?
?
[java]?view plaincopy
while?(condition)?{??
}??
;??
do?{??
}?while?(condition);??
·????????左括號(hào)前加上空格;
·????????左括號(hào)后不加空格;
·????????右括號(hào)前不加空格【#1左大括號(hào)前的空格是規(guī)則#4.2.1】
?
?
[java]?view plaincopy
synchronized?(list)?{??
????list.add(element);??
}??
·????????左括號(hào)前加上空格;
·????????左括號(hào)后不加空格;
·????????右括號(hào)前不加空格【左大括號(hào)前的空格是規(guī)則#4.2.1】
?
?
[java]?view plaincopy
try?{??
????number?=?Integer.parseInt(value);??
}?catch?(NumberFormatException?e)?{??
}??
·????????左括號(hào)前加上空格;
·????????左括號(hào)后不加空格;
·????????右括號(hào)前不加空格【左大括號(hào)前的空格是規(guī)則#4.2.1】
?
?
[java]?view plaincopy
assert?condition?:?reportError();??
?
冒號(hào)前后都加上空格
?
?
[java]?view plaincopy
return?(o);??
?
括號(hào)表達(dá)式前加上空格
?
?
[java]?view plaincopy
throw?(e);??
?
括號(hào)表達(dá)式前加上空格
?
?
?
[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);??
}??
·????????左括號(hào)的前后都不加空格;
·????????右括號(hào)前不加空格;
·????????空的參數(shù)的左右括號(hào)之間不加空格;
·????????方法調(diào)用時(shí)多個(gè)參數(shù)之間分割的逗號(hào)前面不加空格,逗號(hào)后面加空格;
·????????對(duì)象申請(qǐng)時(shí)多個(gè)參數(shù)之間分割的逗號(hào)前面不加空格,逗號(hào)后面加空格;
·????????顯示調(diào)用構(gòu)造函數(shù)時(shí)多個(gè)參數(shù)之間分割的逗號(hào)前面不加空格,逗號(hào)后面加空格;
?
?
[java]?view plaincopy
List?list?=?new?ArrayList();??
int?a?=?-4?+?-9;??
b?=?a++?/?--number;??
c?+=?4;??
boolean?value?=?true?&&?false;??
賦值操作(=)前后都加上空格。【注意:‘+=’是一個(gè)操作數(shù)】
?
?
[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’前面的‘-’)前后都不加空格【示例中‘-’前的空格不是這個(gè)規(guī)則里的】;
·????????前置操作的(#3的‘--number’)前后都不加空格【示例中‘--’前的空格不是這個(gè)規(guī)則里的】;
·????????后置操作的(#3的‘a(chǎn)++’)前后都不加空格【示例中‘++’后的空格不是這個(gè)規(guī)則里的】。
?
?
[java]?view plaincopy
result?=?(a?*?(b?+?c?+?d)?*?(e?+?f));??
?
左括號(hào)前,左括號(hào)后和右括號(hào)前都不加空格【示例中左括號(hào)前的空格不是這個(gè)規(guī)則里的】
?
?
[java]?view plaincopy
String?s?=?((String)?object);??
?
·????????右括號(hào)后加上空格;
·????????左括號(hào)后和右括號(hào)前都不加空格。
?
?
[java]?view plaincopy
String?value?=?condition???TRUE?:?FALSE;??
?
問(wèn)號(hào)前,問(wèn)號(hào)后,冒號(hào)前,冒號(hào)后都要加上空格
?
?
?
[java]?view plaincopy
int[]?array0?=?new?int[]?{};??
int[]?array1?=?new?int[]?{??
????????1,?2,?3??
};??
int[]?array2?=?new?int[3];??
???
array[i].foo();??
?
·????????左中括號(hào)前不加空格;
·????????左右中括號(hào)中間不加空格
示例中:arrayX前的‘[]’
?
·????????左中括號(hào)前后都不加空格;
·????????右中括號(hào)前不加空格;
·????????空的左右中括號(hào)中間不加空格;
示例中:等號(hào)‘=’后面的‘[]’
?
·????????左大括號(hào)前后都加上空格;
·????????右大括號(hào)前加上空格;
·????????逗號(hào)前不加空格;
·????????逗號(hào)后加上空格;
·????????空的大括號(hào)中間不加空格
?
·????????左中括號(hào)前后都不加空格;
·????????右中括號(hào)前面不加空格
?
?
[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;??
?
?
?
?
[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();??
????}??
}??
???
?
?
1)?????包聲明之前有一空白行[#4]
2)?????包聲明之后有一空白行[#6]
3)?????import聲明之前有一空白行[#6]
4)?????import各個(gè)分組之間有一空白行[#9]
5)?????import聲明之后有一空白行[#11]
6)?????類聲明之間有一空白行[#14]
?
1)?????第一個(gè)聲明之間無(wú)空白行[#15 & #16之間]
2)?????相同分類聲明之前有一空白行[#24, #28]
3)?????成員類聲明之前有一空白行
4)?????域聲明之前有一空白行[#18, #24, #26]
5)????? 方法聲明之前有一空白行[#28,#33, #38]??????????
6)????? 方法內(nèi)的開(kāi)始處沒(méi)有空白行[#29和#30之間;#34與#35之間;#39與#40之間]
?
?
?
?
[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{??
}??
???
?
?
1)?????類體內(nèi)為空,插入新行[#5是另起的一行]
2)?????匿名類體內(nèi)為空,插入新行[#13是另起的一行]
3)?????方法內(nèi)為空,插入新行
4)?????空的程序塊,插入新行[#26是另起的一行;#28是另起的一行]
5)?????標(biāo)號(hào)后面不插入新行[#25 do與label在同一行]
6)?????在空的枚舉聲明中,插入新行[#38是另起的一行]
7)?????在空的枚舉常量體中,插入新行[#34是另起的一行]
8)?????在空的注解體中,插入新行[#41是另起的一行]
9)?????在文件結(jié)尾,插入新行[#42是另起的一行]
?
1)?????數(shù)組初始化體的左大括號(hào)后,插入新行[#9是另起的一行]
2)?????數(shù)組初始化體的右大括號(hào)前,插入新行[#10是另起的一行]
?
空的語(yǔ)句放在新行上[#24是另起的一行]
?
1)?????對(duì)成員的注解之后,插入新行[#16 & #17都是另起的一行]
2)?????對(duì)參數(shù)的注解之后,不插入新行[#17 int i與@SuppressWarnings("unused")在同一行]
3)?????對(duì)臨時(shí)變量的注解之后,插入新行[#19是另起的一行]
?
?
?
?
[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;??
????}??
}??
???
?
?
1)?????if語(yǔ)句的else之前,不插入新行[#20& #22的else與‘}’在同一行]
2)?????try語(yǔ)句的catch之前,不插入新行[#9的catch與‘}’在同一行]
3)?????try語(yǔ)句的finally之前,不插入新行[#10的finally與‘}’在同一行]
4)?????do語(yǔ)句的while之前,不插入新行[#7的while與‘}’在同一行]
5)?????#29的‘then’語(yǔ)句與#28的if在不同行,#31的‘then’語(yǔ)句與#30的if在不同行;
6)?????#35的else語(yǔ)句與#34的else在不同行;
7)?????#20和#32的else if中‘else與‘if’在同一行;
8)?????‘return’或‘throw’語(yǔ)句不需要在一行上[#16與#15在兩行上]
?
?
?
?每行最多100個(gè)字符;
?超過(guò)100個(gè)字符的行要換行,新行缺省縮進(jìn)2個(gè)縮進(jìn)單位。一個(gè)縮進(jìn)單位是4個(gè)空格,所以這里總共縮進(jìn)8個(gè)空格。
?缺省數(shù)組初始化值缺省縮進(jìn)2個(gè)縮進(jìn)單位。
?
[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?{??
}??
注解不換行:value1、value2、value3和value4都在同一行上。
?
?
[java]?view plaincopy
/**?
?*?'extends'?clause?
?*/??
class?Example?extends??
????????OtherClass?{??
}??
???
/**?
?*?'implements'?clause?
?*/??
class?Example?implements?I1,??
????????I2,?I3?{??
}??
???
?extends子句在需要換行的地方,用缺省換行方式換行:#5OtherClass處換行,且OtherClass相對(duì)class縮進(jìn)了8個(gè)空格;
?implements子句在需要換行的地方,用缺省換行方式換行:#12I2處換行,且I2相對(duì)class縮進(jìn)了8個(gè)空格。
?
?
?
[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();??
????}??
}??
???
?構(gòu)造體的參數(shù)在需要換行的地方,用缺省換行方式換行:參數(shù)[#6 ]相對(duì)Example[#5]縮進(jìn)了8個(gè)空格;
?構(gòu)造體throws子句在需要換行的地方,用缺省換行方式換行:子句[#20& #21]相對(duì)Example[#19]縮進(jìn)了8個(gè)空格。
?
?
?
[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 很長(zhǎng),但不分行;
?方法聲明處的參數(shù)在需要換行的地方,用缺省換行方式換行:參數(shù)[#14& #15]相對(duì)voidfoo [#13]縮進(jìn)了8個(gè)空格;
?方法聲明處的throws子句在需要換行的地方,用缺省換行方式換行:子句[#24& #25]相對(duì)intfoo [#23]縮進(jìn)了8個(gè)空格。
?
?
?
[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相對(duì)enum縮進(jìn)了8個(gè)空格;
?常量參數(shù)在需要換行的地方,用缺省換行方式換行:#10 和#25處換行,且相對(duì)GREEN縮進(jìn)了8個(gè)空格。
?
?
?
[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);??
????}??
}??
???
?函數(shù)調(diào)用參數(shù)處,在需要換行的地方,用缺省換行方式換行:#7, #8和#9, #10處換行,且#7,#8相對(duì)Other.bar縮進(jìn)了8個(gè)空格, #9, #10相對(duì)nested縮進(jìn)了8個(gè)空格;
?對(duì)象的方法調(diào)用處,在需要換行的地方,用缺省換行方式換行:#19這個(gè)例子不太好,如果這句很長(zhǎng),可以在a和getFirst之間換行,且.放在getFirst前;
?顯示的構(gòu)造函數(shù)調(diào)用處,在需要換行的地方,用缺省換行方式換行:#29處換行,且相對(duì)#30的super縮進(jìn)8個(gè)空格;
?對(duì)象創(chuàng)建參數(shù)處,在需要換行的地方,用缺省換行方式換行:#39, #40處換行,且相對(duì)#38的return縮進(jìn)8個(gè)空格;
?對(duì)象方法構(gòu)造對(duì)象參數(shù)處,在需要換行的地方,用缺省換行方式換行:#50處換行,且相對(duì)#49的return縮進(jìn)8個(gè)空格.
?
?
?
[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";??
????}??
}??
???
?二元表達(dá)式,在需要換行的地方,用缺省換行方式換行:#7, #9和#11,#12處換行,且#7相對(duì)int?sum縮進(jìn)了8個(gè)空格,且#9相對(duì)int?product縮進(jìn)了8個(gè)空格,且#11& #12相對(duì)boolean?val縮進(jìn)了8個(gè)空格;
?三元條件表達(dá)式,除了第一個(gè)元素,用缺省換行方式換行所有其他元素:#22& #23;
?數(shù)組初始化體,在需要換行的地方,用缺省換行方式換行:#32 !處換行,且#32& #33相對(duì)int[] fArray縮進(jìn)了8個(gè)空格;
?賦值語(yǔ)句,不需要換行:#41行很長(zhǎng)也不需要換行。
?
?
?
[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;??
????}??
}??
???
配置起什么用,沒(méi)看懂!
?
?
?
?
[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);??
}??
?注釋每行長(zhǎng)度是80個(gè)字符;
?開(kāi)啟對(duì)Javadoc注釋的格式化;
? 用html的TAG;
? 開(kāi)啟對(duì)‘pre’TAG里的Java代碼片段進(jìn)行格式化;
?
#37 ~ #43
?
? Javadoc TAG前面插入空白行;
?
#47是插入的行
?
? Javadoc Tag縮進(jìn)
§?‘@param’TAG后面的描述縮進(jìn)
?
#49的odd相對(duì)#48的a縮進(jìn)了4個(gè)空格。
?
? 不對(duì)‘@param’TAG插入新行;
?
#48和#50的描述與參數(shù)在同一行。
?
? ‘/**’和‘*/’在不同的行;
? 移除空白行;
?
Javadoc注釋形式見(jiàn)#33~ #52
?
?開(kāi)啟對(duì)塊注釋的格式化;
? ‘/*’和‘*/’在不同的行;
? 移除空白行;
?
塊注釋形式見(jiàn)#26~ #29
?
?開(kāi)啟對(duì)行注釋的格式化;
? 注釋在行的第一列
?
#15, #16 和#17是行注釋,且‘//’與原程序之間的空格仍舊保持。
?
?關(guān)閉對(duì)頭注釋的格式化;
?
#1, #2和#3的頭注釋保持不變。
?
?關(guān)閉對(duì)塊注釋縮進(jìn)到第一列;
?
#23是塊注釋,與程序有相同的縮進(jìn),不是縮進(jìn)到第一列。
?
?關(guān)閉對(duì)行注釋縮進(jìn)到第一列;
?
注:筆者對(duì)行注釋驗(yàn)證,發(fā)現(xiàn)Eclipse中無(wú)論如何設(shè)置,基本不會(huì)改變其行為。
?
?
?
前面講了那么多都是針對(duì)Java程序的,Android中有大量的XML文件。對(duì)XML的格式也要進(jìn)行排版格式化。
打開(kāi)Window> Preferences,可以通過(guò)兩個(gè)地方對(duì)XML文件進(jìn)行格式化:
1)?????XML > XML Files > Editor
對(duì)其中的各項(xiàng)設(shè)置進(jìn)行配置
2)?????Android > Editors
對(duì)其中的各項(xiàng)設(shè)置進(jìn)行配置
?
?
本文分析了Android編碼風(fēng)格在Eclipse環(huán)境中具體實(shí)施,通過(guò)對(duì)Eclipse環(huán)境的配置可以方便的格式化Android程序:Java文件和XML文件,特別是Java文件,其配置是基于JDT實(shí)現(xiàn)的,所以對(duì)Java的方方面面的配置都覆蓋了。
? ? ? ? 但是,只有這些還不夠,對(duì)一般的Java設(shè)計(jì)編碼原則和Android中推薦的風(fēng)格還不能完全自動(dòng)執(zhí)行,還需要人的參與,依賴于團(tuán)隊(duì)風(fēng)格規(guī)范的制定,成員的設(shè)計(jì)能力和領(lǐng)悟執(zhí)行能力。下面是這些工具所不能解決的風(fēng)格和原則:
?
?對(duì)Exception的處理;
?寫短小的方法;
?域的命名規(guī)則;
?程序塊內(nèi)的邏輯分組;
?等等。
文章來(lái)源《IT藍(lán)豹》
當(dāng)前題目:Android代碼規(guī)范
分享URL:http://aaarwkj.com/article32/peiosc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開(kāi)發(fā)、用戶體驗(yàn)、企業(yè)建站、關(guān)鍵詞優(yōu)化、標(biāo)簽優(yōu)化、小程序開(kāi)發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)