Java&Android代码规范

----------------------Java规范----------------------

源文件结构

1. package语句

2. import语句

3. Java Doc

类声明

1. 只有一个顶级类

2. 命名(包名、类名最好不要用复数)

包/类或接口/方法

  1. 包名: 全部小写,用”.”(点)分开,不允许复数

例如:com.util 而不能com.utils

  1. 类: 单个单词, 首字母大写

例如: Constant,多个单词, 每个单词的首字母大写, 例如: WatchVideoActivity

  1. 方法: 单个单词, 全部小写

例如: main() 多个单词, 从第二个单词开始, 每个单词的首字母大写,如setPersonalData()

  1. 接口:I开头或不以I开头。若接口有实现,则必须加I。若接口用于保存常量,则不必加I。

例如:IAdapter表示适配器接口有功能实现。

ActReqResult表示返回值接口,定义一下返回值常量。

成员变量/局部变量/静态成员变量/常量

  1. 成员变量: 小驼峰命名法 如Button sBackButton

  2. 静态成员变量: 大驼峰命名法 如String mPageNum

  3. 局部变量: 小驼峰命名法

  4. 常量: 全部大写, 每个单词用”_”(下划线)隔开, (如MAX_SIZE)

格式

1. 大括号

空块或一行代码

大括号与if, else,while等语句一起使用。若代码块为空,可以采用简洁的书写方式。

示例:

void doNothing() {} //good

if(condition){
  doTest(); 
} // good

if(condition) 
  doTest(); //bad

非空块:K & R 风格

示例:

return new MyClass() { @Override public void method() { if (condition()) { try { something(); } catch (ProblemException e) { recover(); } } } };

2. 块缩进

每当开始一个新的块,缩进增加四个空格或一个tab,当块结束时,缩进返回先前的缩进级别。缩进级别适用于代码和注释。

3. 列限制

一个项目可以选择一行100个字符的列限制,任何一行如果超过这个字符数限制,必须自动换行。

4. 变量声明

每次只声明一个变量

不要使用组合声明,比如int a, b;

变量在使用时初始化

不要在一个代码块的开头把局部变量一次性都声明了(这是c语言的做法),而是在第一次需要使用它时才声明。 局部变量在声明时最好就进行初始化,或者声明后尽快进行初始化。

数组初始化写成块状结构

示例:

int[] indexs = new int[] { 0, 1, 2, 3 }

5. switch语句

default必须写

即使default中无代码,也要写明default

Fall-through:注释

在一个switch块内,每个语句组要么通过break, continue, return或抛出异常来终止,要么通过一条注释来说明程序将继续执行到下一个语句组, 任何能表达这个意思的注释都是OK的(典型的是用//fall through)。这个特殊的注释并不需要在最后一个语句组(一般是default)中出现。

示例:

switch (input) { 
case 1: 
case 2:
 prepareOneOrTwo(); // fall through 
case 3: 
handleOneTwoOrThree(); 
break; 
default: 
handleLargeNumber(input);     
break; 
}

6. 注释

块注释与其周围的代码在同一缩进级别。它们可以是/.../风格,也可以是//...风格。对于多行的/.../注释,后续行必须从开始, 并且与前一行的对齐。

7. Modifiers

类和成员的modifiers如果存在,则按Java语言规范中推荐的顺序出现。

示例:

public protected private abstract static final transient volatile synchronized native strictfp

编程实践

1. @Override:能写必须写

只要是合法的,就把@Override注解给用上。

2. 捕获的异常:不能忽视

打印异常,如果没有内容,请加注释

示例:

try { 
int i = Integer.parseInt(response); 
return handleNumericResponse(i); 
} catch (NumberFormatException ok) {
 // it's not numeric; that's fine, just continue 
} 
return handleTextResponse(response);

3. 静态成员:使用类进行调用

使用类名调用静态的类成员,而不是具体某个对象或表达式。

Foo foo = ...; 
Foo.staticMethod(); // good 
foo.staticMethod(); // bad 
somethingThatYieldsAFoo().staticMethod(); // very bad 

4. Finalizers: 禁用

极少会去重写Object.finalize。

JavaDoc

1. 格式

/** 
* Created by username on 2017/1/1 
*/

方法

1\. 多行注释 
/** 
* Multiple lines of Javadoc text are written here, 
* wrapped normally... 
*/ 
public int method(String p1) { 
... 
} 
2\. 单行注释 
/** An especially short bit of Javadoc. */

Javadoc标记

标准的Javadoc标记按以下顺序出现:@param, @return, @throws, @deprecated, 前面这4种标记如果出现,描述都不能为空。 当描述无法在一行中容纳,连续行需要至少再缩进4个空格。

2. 内容

类、接口注释:说明类与接口的功能

方法注释:说明方法的功能,以下情况必须添加注释

  • 接口中定义的所有方法
  • 抽象类中自定义的抽象方法
  • 抽象父类的自定义公用方法
  • 工具类的公用方法
  • 一些功能复杂不容易懂的方法

成员变量和常量注释:说明变量或常量代表的意义,以下情况必须添加注释

  • 接口中定义的所有常量
  • 公有类的公有常量
  • 枚举类定义的所有枚举常量
  • 实体类的所有属性变量

----------------------Android规范----------------------

命名规范

1. Activity/Fragment/View/数据库/控件名/组件名类名命名

  • Activity: 逻辑名称 + Activity, 例如: LoginActivity
  • Fragment: 逻辑名称 + Fragment, 例如: LoginFragment
  • View: 逻辑名称 + View, 例如: LoginButton
  • Database: 逻辑名称 + DB, 例如: SearchDB
  • BroadcastReceiver: 逻辑名称 + Receiver, 例如: LoginSuccessExistReceiver

2. 方法命名:动词或动名词,采用小驼峰命名法,如onCreate(), onRun()

方法 说明
initXX****() 初始化相关方法,使用init为前缀标志
isXX****() 返回为boolean值方法
getXX****() 返回某个值的方法,使用get为前缀标识
processXX****() 处理数据方法,使用process为前缀标识
displayXX****() 弹出提示框和提示信息,使用display为前缀标识
saveXX****() 与保存数据相关的,使用save为前缀标识
resetXX****() 对数据重组的,使用reset前缀标识
clearXX****() 清除数据相关的
removeXX****() 清除数据相关的
drawXXX****() 绘制数据或效果相关的,使用draw前缀标识

3. Layout命名:

全部小写, 用”_”(下划线)隔开

  • Activity: activity + “_” + 逻辑名称
  • Fragment: fragment + “_” + 逻辑名称
  • Dialog: dialog + “_” + 逻辑名称
  • Item: item+ “_” + 逻辑名称
  • PopuWindow: popuWindow+ “_” + 逻辑名称
  • Layout: layout+"_"+功能名

Layout中控件id命名: View的缩写 + “” + (模块名称 + “” +) View的逻辑名称, (全部小写)

  • ImageView iv_title_back;
  • TextView tv_edit_proson_info
  • FramenLayout fl_mypage_container
  • ReLativeLayout rl_watch_root
  • ImageView iv_menu_myhead

View的缩写参考详情如下:

  • LinearLayout: ll
  • RelativeLayout: rl
  • FramenLayout: fl
  • TextView: tv
  • ImageView: iv
  • ImageButton: ib
  • Button: btn

4. 颜色命名

颜色命名: 常用的容易辨认的颜色用颜色命名
#FFFFFF

色值命名: 不常用的颜色
#C7C7C7

5. Drawable文件名命名

前缀 + ““ +逻辑名称 + (“” + 状态或用途), 全部小写, 前缀:图标--ic 图片--pic 背景--bg

  • icon_im_share_house.png
  • pic_im_guide_page.png
  • bg_empty.png

6. Drawable资源文件命名

选择器:selector+ (模块名称) + “_” + 逻辑名称 (全部小写)

  • selector_im_share_house

图形: “shape” + (模块名称)+ “” + 逻辑名称 (全部小写)

  • shape_setting_item_norml.xml
  • shape_setting_item_selected.xml

成员顺序

一般来说不同的类成员排序可能不同,但考虑到代码的可读性,维护者应该维护一种逻辑去排序他的成员。

变量:常量>静态变量>普通变量

示例:

public static final int PI = 3.14; //常量
 public static int index = 1;       //静态变量
 public int x = 1;                  //共有变量
  private int y = 1;                 //私有变量

--------------------------后记--------------------------

几条小建议:

1. Activity的类名与layout的命名统一, 如ShareHouseListActivity--activity_share_house_list

2. View变量名与Layout的ViewId统一, 如tvShareHouse--tv_share_house

  1. activity中在一个View.OnClickListener中处理所有的逻辑

4. 方法放置顺序尽量按照调用的顺序

参考:

http://blog.csdn.net/wwj_748/article/details/42347283

http://source.android.com/source/code-style.html

http://blog.csdn.net/h3c4lenovo/article/details/7917293

http://blog.csdn.net/vipzjyno1/article/details/23542617

http://www.androidchina.net/2141.html

https://www.gitbook.com/book/shibin/android-codeformat/details

http://www.hawstein.com/posts/google-java-style.html

https://segmentfault.com/a/1190000005893399

你可能感兴趣的:(Java&Android代码规范)