美文网首页
Java&Android代码规范

Java&Android代码规范

作者: pphdsny | 来源:发表于2018-01-09 15:50 被阅读25次

    ----------------------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. 颜色命名

    颜色命名: 常用的容易辨认的颜色用颜色命名
    <color name="color_white">#FFFFFF</color>

    色值命名: 不常用的颜色
    <color name="color_C7C7C7">#C7C7C7</color>

    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代码规范

          本文链接:https://www.haomeiwen.com/subject/pnfgnxtx.html