亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android代碼規范

發布時間:2020-09-29 03:22:36 來源:網絡 閱讀:275 作者:楊光成 欄目:移動開發

Android代碼規范  ——轉發請表明出處《IT藍豹》:http://itlanbao.com/preview.aspx#1,0


[-]

  1. 一Import的次序

  2. 二縮進Indentation

    1. 總則

    2. 示例代碼

    3. 規則說明

  3. 三大括號Braces的位置

    1.  

    2. 示例代碼

    3. 規則說明

  4. 四空格White Space

    1. 聲明

    2. 申請

    3. 初始化體

    4. 數組元素的訪問

    5. 函數調用

    6. 賦值

    7. 操作數

    8. 加括號的表達式

    9. 類型轉換

    10. 三元條件表達式

    11. 程序塊

    12. if else語句

    13. for語句

    14. switch語句

    15. while和dowhile語句

    16. 同步synchronized語句

    17. catch語句

    18. assert語句

    19. return語句

    20. throw語句

    21. 臨時變量

    22. 構造體

    23. 方法

    24. 標號

    25. 注解Annotation

    26. 枚舉Enumtypes

    27. 注解類型Annotationtypes

    28. 聲明

    29. 控制語句

    30. 表達式

    31. 數組

    32. 泛型

  5. 五空白行BlankLines

    1. 示例代碼

    2. 規則說明

    3. 七控制語句ControlStatements

    4. 八換行LineWrapping

    5. 九注釋Comments

    6. 十Android中XML文件的格式化

    7. 總結

    8. 插入新行

    9. 數組初始化

    10. 空的語句

    11. 注解

    12. 示例代碼

    13. 規則說明

    14. 總則

    15. 注解Annotation

    16. 類聲明

    17. 構造體聲明

    18. 方法聲明

    19. 枚舉聲明

    20. 函數調用

    21. 表達式

    22. 語句

    23. 編譯單元之間的空白行

    24. 類內部的空白行

    25. 示例代碼

    26. 規則說明

    27. 六插入新行NewLines

 

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導入。

下面講解這些配置都做了什么,在代碼中如何具體體現的。

一、Import的次序

Google推薦的AndroidJava文件開頭import的次序(按照先后)是:

  1. com

  2. org

  3. android

  4. java

  5. javax

排列原則:

 

  • ?這個次序也是根據看import語句的重要性來排定的:首先希望看到用了android里的哪些類;然后是其他第三方的;最后才關注標準Java庫里的。

  • ?不同的import分組之間是有一個空白行,在5.2.1?4)中描述。

  • ?同一import分組內部按照字母次序排列。

 

二、縮進(Indentation)

2.1 總則

縮進只用空格,不用制表符(TAB)。縮進用4個空格,按下TAB鍵用4個空格代替。

?

2.2 示例代碼

?

[java]?view plaincopy

  1. /**?

  2. ?*?Indentation?

  3. ?*/??

  4. class?Example?{??

  5. ????int[]?myArray?=?{??

  6. ????????????1,?2,?3,?4,?5,?6??

  7. ????};??

  8. ???

  9. ????int?theInt?=?1;??

  10. ???

  11. ????String?someString?=?"Hello";??

  12. ???

  13. ????double?aDouble?=?3.0;??

  14. ???

  15. ????void?foo(int?a,?int?b,?int?c,?int?d,?int?e,?int?f)?{??

  16. ????????switch?(a)?{??

  17. ????????????case?0:??

  18. ????????????????Other.doFoo();??

  19. ????????????????break;??

  20. ????????????default:??

  21. ????????????????Other.doBaz();??

  22. ????????}??

  23. ????}??

  24. ???

  25. ????void?bar(List?v)?{??

  26. ????????for?(int?i?=?0;?i?<10;?i++)?{??

  27. ????????????v.add(new?Integer(i));??

  28. ????????}??

  29. ????}??

  30. }??

  31. ???

  32. enum?MyEnum?{??

  33. ????UNDEFINED(0)?{??

  34. ????????void?foo()?{??

  35. ????????}??

  36. ????}??

  37. }??

  38. ???

  39. @interface?MyAnnotation?{??

  40. ????int?count()?default?1;??

  41. }??

  42. ???

 

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]是沒有縮進的

三、大括號(Braces)的位置

 

3.1 示例代碼

[java]?view plaincopy

  1. /**?

  2. ?*?Braces?

  3. ?*/??

  4. interface?Empty?{??

  5. }??

  6. ???

  7. enum?MyEnum?{??

  8. ????UNDEFINED(0)?{??

  9. ????????void?foo()?{??

  10. ????????}??

  11. ????}??

  12. }??

  13. ???

  14. @interfaceSomeAnnotationType?{??

  15. }??

  16. ???

  17. class?Example?{??

  18. ????SomeClass?fField?=?new?SomeClass()?{??

  19. ????};??

  20. ???

  21. ????int[]?myArray?=?{??

  22. ????????????1,?2,?3,?4,?5,?6??

  23. ????};??

  24. ???

  25. ????int[]?emptyArray?=?new?int[]?{};??

  26. ???

  27. ????Example()?{??

  28. ????}??

  29. ???

  30. ????void?bar(int?p)?{??

  31. ????????for?(int?i?=?0;?i?<10;?i++)?{??

  32. ????????}??

  33. ????????switch?(p)?{??

  34. ????????????case?0:??

  35. ????????????????fField.set(0);??

  36. ????????????????break;??

  37. ????????????case?1:?{??

  38. ????????????????break;??

  39. ????????????}??

  40. ????????????default:??

  41. ????????????????fField.reset();??

  42. ????????}??

  43. ????}??

  44. }??

  45. ???


?

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 {的位置

?

?

四、空格(White Space)

?

4.1 聲明

?

4.1.1 類

?

[java]?view plaincopy

  1. class?MyClass?implements?I0,?I1,?I2?{??

  2. }??

  3. ???

  4. AnonClass?=?new?AnonClass()?{??

  5. ????void?foo(Some?s)?{??

  6. ????}??

  7. };??

·????????類的左大括號的前面加空格;

·????????匿名類的左大括號的前面加空格;

·????????implements語句中逗號的前面,不加空格;

·????????implements語句中逗號的后面,加上空格;

?

4.1.2 域

?

[java]?view plaincopy

  1. int?a?=?0,?b?=?1,?c=?2,?d?=?3;??

?

·????????多個域聲明中逗號的前面,不加空格;

·????????多個域聲明中逗號的后面,加上空格。

?

4.1.3 臨時變量

?

[java]?view plaincopy

  1. int?a?=?0,?b?=?1,?c=?2,?d?=?3;??

?

·????????多個臨時變量聲明中逗號的前面,不加空格;

·????????多個臨時變量聲明中逗號的后面,加上空格;

?

4.1.4 構造體

[java]?view plaincopy

  1. MyClass()?throws?E0,?E1?{??

  2. ????this(0,?0,?0);??

  3. }??

  4. ???

  5. MyClass(int?x,?int?y,?int?z)?throws?E0,?E1?{??

  6. ????super(x,?y,?z,?true);??

  7. }??


·????????左小括號的前面,不加空格;

·????????左小括號的后面,不加空格;

·????????右小括號的前面,不加空格;

·????????小括號內為空,則它們之間不加空格;

·????????左大括號前面,加上空格;

·????????參數列表中逗號之前,不加空格;

·????????參數列表中逗號之后,加上空格;

·????????throws語句中逗號之前,不加空格;

·????????throws語句中逗號之后,加上空格。

?

4.1.5 方法

?

[java]?view plaincopy

  1. void?foo()?throws?E0,?E1?{??

  2. };??

  3. ???

  4. void?bar(int?x,?int?y)?throws?E0,?E1?{??

  5. }??

  6. ???

  7. void?format(Strings,?Object...?args)?{??

  8. }??

·????????左小括號的前面,不加空格;

·????????左小括號的后面,不加空格;

·????????右小括號的前面,不加空格;

·????????小括號內為空,則它們之間不加空格;

·????????左大括號前面,加上空格;

·????????參數列表中逗號之前,不加空格;

·????????參數列表中逗號之后,加上空格;

·????????可變參數列表省略號之前,不加空格;

·????????可變參數列表省略號之后,加上空格;

·????????throws語句中逗號之前,不加空格;

·????????throws語句中逗號之后,加上空格。

?

4.1.6 標號

?

[java]?view plaincopy

  1. label:?for?(int?i?=?0;?i?<?list.length;?i++)?{??

  2. ????for?(int?j?=?0;?j?<?list[i].length;?j++)??

  3. ????????continue?label;??

  4. }??

·????????冒號之前,不加空格;

·????????冒號之后,加上空格

?

4.1.7 注解/Annotation

?

[java]?view plaincopy

  1. @Annot(x?=?23,?y?=?-3)??

  2. public?class?A?{??

  3. }??

·????????‘@’之后,不加空格;

·????????左小括號的前面,不加空格;

·????????左小括號的后面,不加空格;

·????????逗號前面,不加空格;

·????????逗號后面,加上空格;

·????????右小括號的前面,不加空格

?

4.1.8 枚舉/Enumtypes

?

[java]?view plaincopy

  1. enum?MyEnum?{??

  2. ????GREEN(0,?1),?RED()?{??

  3. ????????void?process()?{??

  4. ????????}??

  5. ????}??

  6. }??

·????????聲明中左大括號的前面[#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

  1. @interface?MyAnnotation?{??

  2. ????String?value();??

  3. }??

  4. ???

  5. @interface?OtherAnnotation?{??

  6. }??

·????????‘@’之前,不加空格;

·????????‘@’之后,不加空格

·????????左大括號的前面,加上空格;

·????????注解類型成員的左小括號的前面,不加空格;

·????????注解類型成員的小括號的之間,不加空格;

?

4.2 控制語句

?

4.2.1 程序塊

?

[java]?view plaincopy

  1. if?(true)?{??

  2. ????return?1;??

  3. }?else?{??

  4. ????return?2;??

  5. }??

·????????左大括號前面,加上空格;

·????????右大括號后面,加上空格。

?

4.2.2 if else語句

?

[java]?view plaincopy

  1. if?(condition)?{??

  2. ????return?foo;??

  3. }?else?{??

  4. ????return?bar;??

  5. }??

·????????左小括號前加上空格;

·????????左小括號后不加空格;

·????????右小括號前不加空格【左大括號前的空格是規則#4.2.1】

?

4.2.3 for語句

?

[java]?view plaincopy

  1. for?(int?i?=?0,?j?=?array.length;?i?<?array.length;?i++,?j--)?{??

  2. }??

  3. for?(String?s?:?names)?{??

  4. }??

·????????左小括號前加上空格;

·????????左小括號后不加空格;

·????????右小括號前不加空格【左大括號前的空格是規則#4.2.1】

·????????初始化語句的逗號前不加空格;

·????????初始化語句的逗號后加上空格

·????????增量語句的逗號前不加空格;

·????????增量語句的逗號后加上空格

·????????語句之間的分號前不加空格;

·????????語句之間的分號后加上空格;

·????????冒號前面加上空格;

·????????冒號后面加上空格。

?

4.2.4 switch語句

?

[java]?view plaincopy

  1. switch?(number)?{??

  2. ????case?RED:??

  3. ????????return?GREEN;??

  4. ????case?GREEN:??

  5. ????????return?BLUE;??

  6. ????case?BLUE:??

  7. ????????return?RED;??

  8. ????default:??

  9. ????????return?BLACK;??

  10. }??

· ? ? ? ?case和default的冒號(‘:’)前不加空格;

·????????左括號(‘(’)和左大括號(‘{’)前都加上空格;

·????????左括號(‘(’)后和右括號(‘)’)前都不加空格。

?

4.2.5 while和dowhile語句

?

[java]?view plaincopy

  1. while?(condition)?{??

  2. }??

  3. ;??

  4. do?{??

  5. }?while?(condition);??

·????????左括號前加上空格;

·????????左括號后不加空格;

·????????右括號前不加空格【#1左大括號前的空格是規則#4.2.1】

?

4.2.6 同步(synchronized)語句

?

[java]?view plaincopy

  1. synchronized?(list)?{??

  2. ????list.add(element);??

  3. }??

·????????左括號前加上空格;

·????????左括號后不加空格;

·????????右括號前不加空格【左大括號前的空格是規則#4.2.1】

?

4.2.7 catch語句

?

[java]?view plaincopy

  1. try?{??

  2. ????number?=?Integer.parseInt(value);??

  3. }?catch?(NumberFormatException?e)?{??

  4. }??

·????????左括號前加上空格;

·????????左括號后不加空格;

·????????右括號前不加空格【左大括號前的空格是規則#4.2.1】

?

4.2.8 assert語句

?

[java]?view plaincopy

  1. assert?condition?:?reportError();??

?

冒號前后都加上空格

?

4.2.9 return語句

?

[java]?view plaincopy

  1. return?(o);??

?

括號表達式前加上空格

?

4.2.10 throw語句

?

[java]?view plaincopy

  1. throw?(e);??

?

括號表達式前加上空格

?

4.3 表達式

?

4.2.1 函數調用

?

[java]?view plaincopy

  1. foo();??

  2. bar(x,?y);??

  3. ???

  4. String?str?=?new?String();??

  5. Point?point?=?new?Point(x,?y);??

  6. ???

  7. MyClass()?throws?E0,?E1?{??

  8. ????this(0,?0,?0);??

  9. }??

  10. ???

  11. MyClass(int?x,?int?y,?int?z)?throws?E0,?E1?{??

  12. ????super(x,?y,?z,?true);??

  13. }??

·????????左括號的前后都不加空格;

·????????右括號前不加空格;

·????????空的參數的左右括號之間不加空格;

·????????方法調用時多個參數之間分割的逗號前面不加空格,逗號后面加空格;

·????????對象申請時多個參數之間分割的逗號前面不加空格,逗號后面加空格;

·????????顯示調用構造函數時多個參數之間分割的逗號前面不加空格,逗號后面加空格;

?

4.3.2 賦值

?

[java]?view plaincopy

  1. List?list?=?new?ArrayList();??

  2. int?a?=?-4?+?-9;??

  3. b?=?a++?/?--number;??

  4. c?+=?4;??

  5. boolean?value?=?true?&&?false;??

賦值操作(=)前后都加上空格。【注意:‘+=’是一個操作數】

?

4.3.3 操作數

?

[java]?view plaincopy

  1. List?list?=?new?ArrayList();??

  2. int?a?=?-4?+?-9;??

  3. b?=?a++?/?--number;??

  4. c?+=?4;??

  5. boolean?value?=?true?&&?false;??

·????????二元操作(#2的‘+’;#3的‘/’;#5的‘&&’)前后都加上空格;

·????????一元操作(#2 ‘4’和‘9’前面的‘-’)前后都不加空格【示例中‘-’前的空格不是這個規則里的】;

·????????前置操作的(#3的‘--number’)前后都不加空格【示例中‘--’前的空格不是這個規則里的】;

·????????后置操作的(#3的‘a++’)前后都不加空格【示例中‘++’后的空格不是這個規則里的】。

?

4.3.4 加括號的表達式

?

[java]?view plaincopy

  1. result?=?(a?*?(b?+?c?+?d)?*?(e?+?f));??

?

左括號前,左括號后和右括號前都不加空格【示例中左括號前的空格不是這個規則里的】

?

4.3.5 類型轉換

?

[java]?view plaincopy

  1. String?s?=?((String)?object);??

?

·????????右括號后加上空格;

·????????左括號后和右括號前都不加空格。

?

4.3.6 三元條件表達式

?

[java]?view plaincopy

  1. String?value?=?condition???TRUE?:?FALSE;??

?

問號前,問號后,冒號前,冒號后都要加上空格

?

4.4 數組

?

?

[java]?view plaincopy

  1. int[]?array0?=?new?int[]?{};??

  2. int[]?array1?=?new?int[]?{??

  3. ????????1,?2,?3??

  4. };??

  5. int[]?array2?=?new?int[3];??

  6. ???

  7. array[i].foo();??

?

4.4.1 聲明

·????????左中括號前不加空格;

·????????左右中括號中間不加空格

示例中:arrayX前的‘[]’

?

4.4.2 申請

·????????左中括號前后都不加空格;

·????????右中括號前不加空格;

·????????空的左右中括號中間不加空格;

示例中:等號‘=’后面的‘[]’

?

4.4.3 初始化體

·????????左大括號前后都加上空格;

·????????右大括號前加上空格;

·????????逗號前不加空格;

·????????逗號后加上空格;

·????????空的大括號中間不加空格

?

4.4.4 數組元素的訪問

·????????左中括號前后都不加空格;

·????????右中括號前面不加空格

?

4.5 泛型

?

[java]?view plaincopy

  1. Map<String,?Element>?map?=?newHashMap<String,?Element>();??

  2. ???

  3. x.<String,?Element>?foo();??

  4. ???

  5. classMyGenericType<S,?T?extends?Element?&?List>?{??

  6. }??

  7. ???

  8. Map<X<?>,?Y<??extendsK,???super?V>>?t;??

?

?

五、空白行(BlankLines)

?

5.1 示例代碼

?

[java]?view plaincopy

  1. /**?

  2. ?*?Blank?Lines?

  3. ?*/??

  4. ???

  5. package?foo.bar.baz;??

  6. ???

  7. import?java.util.List;??

  8. import?java.util.Vector;??

  9. ???

  10. import?java.net.Socket;??

  11. ???

  12. public?class?Another?{??

  13. }??

  14. ???

  15. public?class?Example?{??

  16. ????public?static?class?Pair?{??

  17. ????????public?String?first;??

  18. ???

  19. ????????public?String?second;??

  20. ????????//?Between?here...??

  21. ???

  22. ????????//?...and?here?are?10?blank?lines??

  23. ????};??

  24. ???

  25. ????private?LinkedList?fList;??

  26. ???

  27. ????public?int?counter;??

  28. ???

  29. ????publicExample(LinkedList?list)?{??

  30. ????????fList?=?list;??

  31. ????????counter?=?0;??

  32. ????}??

  33. ???

  34. ????public?void?push(Pair?p)?{??

  35. ????????fList.add(p);??

  36. ????????++counter;??

  37. ????}??

  38. ???

  39. ????public?Object?pop()?{??

  40. ????????--counter;??

  41. ????????return?(Pair)fList.getLast();??

  42. ????}??

  43. }??

  44. ???


?

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之間]

?

?

六、插入新行(NewLines)

?

6.1 示例代碼

?

[java]?view plaincopy

  1. /**?

  2. ?*?New?Lines?

  3. ?*/??

  4. public?class?Empty?{??

  5. }??

  6. ???

  7. class?Example?{??

  8. ????static?int[]?fArray?=?{??

  9. ????????????1,?2,?3,?4,?5??

  10. ????};??

  11. ???

  12. ????Listener?fListener?=?new?Listener()?{??

  13. ????};??

  14. ???

  15. ????@Deprecated??

  16. ????@Override??

  17. ????public?void?bar(@SuppressWarnings("unused")?int?i)?{??

  18. ????????@SuppressWarnings("unused")??

  19. ????????int?k;??

  20. ????}??

  21. ???

  22. ????void?foo()?{??

  23. ????????;??

  24. ????????;??

  25. ????????label:?do?{??

  26. ????????}?while?(false);??

  27. ????????for?(;;)?{??

  28. ????????}??

  29. ????}??

  30. }??

  31. ???

  32. enum?MyEnum?{??

  33. ????UNDEFINED(0)?{??

  34. ????}??

  35. }??

  36. ???

  37. enum?EmptyEnum?{??

  38. }??

  39. ???

  40. @interface?EmptyAnnotation{??

  41. }??

  42. ???

?

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是另起的一行]

?

?

七、控制語句(ControlStatements)

?

7.1 示例代碼

?

[java]?view plaincopy

  1. /**?

  2. ?*?If...else?

  3. ?*/??

  4. class?Example?{??

  5. ????void?bar()?{??

  6. ????????do?{??

  7. ????????}?while?(true);??

  8. ????????try?{??

  9. ????????}?catch?(Exception?e)?{??

  10. ????????}?finally?{??

  11. ????????}??

  12. ????}??

  13. ???

  14. ????void?foo2()?{??

  15. ????????if?(true)?{??

  16. ????????????return;??

  17. ????????}??

  18. ????????if?(true)?{??

  19. ????????????return;??

  20. ????????}?else?if?(false)?{??

  21. ????????????return;??

  22. ????????}?else?{??

  23. ????????????return;??

  24. ????????}??

  25. ????}??

  26. ???

  27. ????void?foo(int?state)?{??

  28. ????????if?(true)??

  29. ????????????return;??

  30. ????????if?(true)??

  31. ????????????return;??

  32. ????????else?if?(false)??

  33. ????????????return;??

  34. ????????else??

  35. ????????????return;??

  36. ????}??

  37. }??

  38. ???

?

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在兩行上]

?

?

八、換行(LineWrapping)

?

8.1 總則

  • ?每行最多100個字符;

  • ?超過100個字符的行要換行,新行缺省縮進2個縮進單位。一個縮進單位是4個空格,所以這里總共縮進8個空格。

  • ?缺省數組初始化值缺省縮進2個縮進單位。

?

8.2 注解(Annotation)

[java]?view plaincopy

  1. /**?

  2. ?*?Element-value?pairs?

  3. ?*/??

  4. @MyAnnotation(value1?=?"this?isan?example",?value2?=?"of?an?annotation",?value3?=?"withseveral?arguments",?value4?=?"by?Haili?TIAN?(haili.tian@gmail.com)")??

  5. class?Example?{??

  6. }??

注解不換行:value1、value2、value3和value4都在同一行上。

?

8.3 類聲明

?

[java]?view plaincopy

  1. /**?

  2. ?*?'extends'?clause?

  3. ?*/??

  4. class?Example?extends??

  5. ????????OtherClass?{??

  6. }??

  7. ???

  8. /**?

  9. ?*?'implements'?clause?

  10. ?*/??

  11. class?Example?implements?I1,??

  12. ????????I2,?I3?{??

  13. }??

  14. ???

  • ?extends子句在需要換行的地方,用缺省換行方式換行:#5OtherClass處換行,且OtherClass相對class縮進了8個空格;

  • ?implements子句在需要換行的地方,用缺省換行方式換行:#12I2處換行,且I2相對class縮進了8個空格。

?

?

8.4 構造體聲明

?

[java]?view plaincopy

  1. /**?

  2. ?*?Parameters?

  3. ?*/??

  4. class?Example?{??

  5. ????Example(int?arg1,?int?arg2,??

  6. ????????????int?arg3,?int?arg4,??

  7. ????????????int?arg5,?int?arg6)?{??

  8. ????????this();??

  9. ????}??

  10. ???

  11. ????Example()?{??

  12. ????}??

  13. }??

  14. ???

  15. /**?

  16. ?*?'throws'?clause?

  17. ?*/??

  18. class?Example?{??

  19. ????Example()?throws?FirstException,??

  20. ????????????SecondException,??

  21. ????????????ThirdException?{??

  22. ????????returnOther.doSomething();??

  23. ????}??

  24. }??

  25. ???

  • ?構造體的參數在需要換行的地方,用缺省換行方式換行:參數[#6 &#7]相對Example[#5]縮進了8個空格;

  • ?構造體throws子句在需要換行的地方,用缺省換行方式換行:子句[#20& #21]相對Example[#19]縮進了8個空格。

?

?

8.5 方法聲明

?

[java]?view plaincopy

  1. /**?

  2. ?*?Declaration?

  3. ?*/??

  4. class?Example?{??

  5. ????public?final?synchronizedjava.lang.String?a_method_with_a_long_name()?{??

  6. ????}??

  7. }??

  8. ???

  9. /**?

  10. ?*?Parameters?

  11. ?*/??

  12. class?Example?{??

  13. ????void?foo(int?arg1,?int?arg2,??

  14. ????????????int?arg3,?int?arg4,??

  15. ????????????int?arg5,?int?arg6)?{??

  16. ????}??

  17. }??

  18. ???

  19. /**?

  20. ?*?'throws'?clause?

  21. ?*/??

  22. class?Example?{??

  23. ????int?foo()?throws?FirstException,??

  24. ????????????SecondException,??

  25. ????????????ThirdException?{??

  26. ????????returnOther.doSomething();??

  27. ????}??

  28. }??

  29. ???

  • ?方法聲明處不換行:#5 很長,但不分行;

  • ?方法聲明處的參數在需要換行的地方,用缺省換行方式換行:參數[#14& #15]相對voidfoo [#13]縮進了8個空格;

  • ?方法聲明處的throws子句在需要換行的地方,用缺省換行方式換行:子句[#24& #25]相對intfoo [#23]縮進了8個空格。

?

?

8.6 枚舉聲明

?

[java]?view plaincopy

  1. /**?

  2. ?*?Constants?

  3. ?*/??

  4. enum?Example?{??

  5. ????CANCELLED,?RUNNING,?WAITING,?FINISHED??

  6. }??

  7. ???

  8. enum?Example?{??

  9. ????GREEN(0,?255,?0),?RED(??

  10. ????????????255,?0,?0)??

  11. }??

  12. ???

  13. /**?

  14. ?*?'implements'?clause?

  15. ?*/??

  16. enum?Example?implements?A,?B,??

  17. ????????C?{??

  18. }??

  19. ???

  20. /**?

  21. ?*?Constant?arguments?

  22. ?*/??

  23. enum?Example?{??

  24. ????GREEN(0,?255,?0),?RED(??

  25. ????????????255,?0,?0)??

  26. }??

  27. ???

  • ?枚舉常量定義的地方,不換行:#5不換行;

  • ?implements子句在需要換行的地方,用缺省換行方式換行:#17 C處換行,且C相對enum縮進了8個空格;

  • ?常量參數在需要換行的地方,用缺省換行方式換行:#10 和#25處換行,且相對GREEN縮進了8個空格。

?

?

8.7 函數調用

?

[java]?view plaincopy

  1. /**?

  2. ?*?Arguments?

  3. ?*/??

  4. class?Example?{??

  5. ????void?foo()?{??

  6. ????????Other.bar(??

  7. ????????????????100,??

  8. ????????????????nested(200,?300,?400,??

  9. ????????????????????????500,?600,?700,??

  10. ????????????????????????800,?900));??

  11. ????}??

  12. }??

  13. ???

  14. /**?

  15. ?*?Qualified?invocations?

  16. ?*/??

  17. class?Example?{??

  18. ????int?foo(Some?a)?{??

  19. ????????return?a.getFirst();??

  20. ????}??

  21. }??

  22. ???

  23. /**?

  24. ?*?Explicit?constructor?invocations?

  25. ?*/??

  26. class?Example?extends?AnotherClass?{??

  27. ????Example()?{??

  28. ????????super(100,?200,?300,400,?500,??

  29. ????????????????600,?700);??

  30. ????}??

  31. }??

  32. ???

  33. /**?

  34. ?*?Object?allocation?arguments?

  35. ?*/??

  36. class?Example?{??

  37. ????SomeClass?foo()?{??

  38. ????????return?new?SomeClass(100,200,??

  39. ????????????????300,?400,?500,?600,??

  40. ????????????????700,?800,?900);??

  41. ????}??

  42. }??

  43. ???

  44. /**?

  45. ?*?Qualified?object?allocation?arguments?

  46. ?*/??

  47. class?Example?{??

  48. ????SomeClass?foo()?{??

  49. ????????return?SomeOtherClass.new?SomeClass(??

  50. ????????????????100,?200,?300,?400,?500);??

  51. ????}??

  52. }??

  53. ???

  • ?函數調用參數處,在需要換行的地方,用缺省換行方式換行:#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

  1. /**?

  2. ?*?Binary?expressions?

  3. ?*/??

  4. class?Example?extends?AnotherClass?{??

  5. ????int?foo()?{??

  6. ????????int?sum?=?100?+?200?+?300?+?400??

  7. ????????????????+?500?+?600?+?700?+?800;??

  8. ????????int?product?=?1?*?2?*?3?*?4?*?5??

  9. ????????????????*?6?*?7?*?8?*?9?*?10;??

  10. ????????boolean?val?=?true?&&?false??

  11. ????????????????&&?true?&&?false??

  12. ????????????????&&?true;??

  13. ????????return?product?/?sum;??

  14. ????}??

  15. }??

  16. ???

  17. /**?

  18. ?*?Conditionals?

  19. ?*/??

  20. class?Example?extends?AnotherClass?{??

  21. ????int?Example(boolean?Argument)?{??

  22. ????????return?argument??100000??

  23. ????????????????:?200000;??

  24. ????}??

  25. }??

  26. ???

  27. /**?

  28. ?*?Array?initializers?

  29. ?*/??

  30. class?Example?{??

  31. ????int[]?fArray?=?{??

  32. ????????????1,?2,?3,?4,?5,?6,?7,?8,?9,??

  33. ????????????10,?11,?12??

  34. ????};??

  35. }??

  36. ???

  37. /**?

  38. ?*?Assignments?

  39. ?*/??

  40. class?Example?{??

  41. ????private?static?final?String?string?="TextTextText";??

  42. ???

  43. ????void?foo()?{??

  44. ????????for?(int?i?=?0;?i?<10;?i++)?{??

  45. ????????}??

  46. ????????String?s;??

  47. ????????s?=?"TextTextText";??

  48. ????}??

  49. }??

  50. ???

  • ?二元表達式,在需要換行的地方,用缺省換行方式換行:#7, #9和#11,#12處換行,且#7相對int?sum縮進了8個空格,且#9相對int?product縮進了8個空格,且#11& #12相對boolean?val縮進了8個空格;

  • ?三元條件表達式,除了第一個元素,用缺省換行方式換行所有其他元素:#22& #23;

  • ?數組初始化體,在需要換行的地方,用缺省換行方式換行:#32 &#33處換行,且#32& #33相對int[] fArray縮進了8個空格;

  • ?賦值語句,不需要換行:#41行很長也不需要換行。

?

?

8.9 語句

?

[java]?view plaincopy

  1. /**?

  2. ?*?Compact?'if?else'?

  3. ?*/??

  4. class?Example?{??

  5. ????int?foo(int?argument)?{??

  6. ????????if?(argument?==?0)??

  7. ????????????return?0;??

  8. ????????if?(argument?==?1)??

  9. ????????????return?42;??

  10. ????????else??

  11. ????????????return?43;??

  12. ????}??

  13. }??

  14. ???

配置起什么用,沒看懂!

?

?

九、注釋(Comments)

?

?

[java]?view plaincopy

  1. ??

[java]?view plaincopy

  1. /**?

  2. ?*?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.?

  3. ?*/??

  4. ???

  5. package?mypackage;??

  6. ???

  7. /**?

  8. ?*?This?is?the?comment?for?the?example?interface.?

  9. ?*/??

  10. interface?Example?{??

  11. ????//?This?is?a?long?comment?with?white?space?that?should?be?split?in?multiple??

  12. ????//?line?comments?in?case?the?linecomment?formatting?is?enabled??

  13. ????int?foo3();??

  14. ?????

  15. //????void?commented()?{??

  16. //????????System.out.println("indented");??

  17. //????}??

  18. ???

  19. ????//?void?indentedCommented()?{??

  20. ????//?System.out.println("indented");??

  21. ????//?}??

  22. ???

  23. ????/*?block?comment?on?first?column?*/??

  24. ????int?bar();??

  25. ???

  26. ????/*?

  27. ?????*?These?possibilities?include:<ul><li>Formatting?of?header?

  28. ?????*?comments.</li><li>Formatting?of?Javadoc?tags</li></ul>?

  29. ?????*/??

  30. ????int?bar2();?//?This?is?along?comment?that?should?be?split?in?multiple?line??

  31. ????????????????//?comments?in?case?the?linecomment?formatting?is?enabled??

  32. ???

  33. ????/**?

  34. ?????*?The?following?is?some?sample?code?whichillustrates?source?formatting?

  35. ?????*?within?javadoc?comments:?

  36. ?????*?

  37. ?????*?<pre>?

  38. ?????*?public?class?Example?{?

  39. ?????*????final?int?a?=?1;?

  40. ?????*?

  41. ?????*????final?boolean?b?=?true;?

  42. ?????*?}?

  43. ?????*?</pre>?

  44. ?????*?

  45. ?????*?Descriptions?of?parameters?and?returnvalues?are?best?appended?at?end?of?

  46. ?????*?the?javadoc?comment.?

  47. ?????*?

  48. ?????*?@param?a?The?first?parameter.?For?an?optimum?result,?this?should?be?an?

  49. ?????*????????????odd?number?between?0?and?100.?

  50. ?????*?@param?b?The?second?parameter.?

  51. ?????*?@return?The?result?of?the?foo?operation,?usually?within?0?and?1000.?

  52. ?????*/??

  53. ????int?foo(int?a,?int?b);??

  54. }??

  • ?注釋每行長度是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中無論如何設置,基本不會改變其行為。

?

?

十、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藍豹》



向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

贺州市| 重庆市| 新密市| 沂源县| 英山县| 隆德县| 建宁县| 山丹县| 沙河市| 随州市| 洪雅县| 宁强县| 韩城市| 宁晋县| 麻阳| 利津县| 松滋市| 津市市| 庄浪县| 三江| 志丹县| 阳西县| 新密市| 夏津县| 信丰县| 正定县| 遵义县| 黄冈市| 新巴尔虎左旗| 海宁市| 呼伦贝尔市| 伊金霍洛旗| 卓资县| 兴义市| 根河市| 资源县| 乐东| 新余市| 宁强县| 南平市| 建始县|