java android代码_Java&Android代码规范

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

源文件结构

1. package语句

2. import语句

3. Java Doc

类声明

1. 只有一个顶级类

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

包/类或接口/方法

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

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

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

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

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

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

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

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

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

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

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

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

局部变量: 小驼峰命名法

常量: 全部大写, 每个单词用”_”(下划线)隔开, (如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

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

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

参考:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值