zoukankan      html  css  js  c++  java
  • Java编程规范

    从一开始接触编程就多次听到编程得养成好的编码习惯。的确,不让好的编码成为习惯,也就只能在随意的代码风格里放纵了(网上浏览到的代码是有这样的吧)。

    在网上也看了很多人的总结,学到很多。将其中的部分进行汇总,这次的随笔大部分只是文字的搬运工,如有误还请指正。

    一.标识符命名(尽量以最少的字符表达完整的含义,但是命名中缩写使用:尽量不要用缩写,除非该缩写是约定俗成的。)

    常见的英文单词缩写:

    1.1 驼峰(Camel)命名法:又称小驼峰命名法,除首单词外,其余所有单词的第一个字母大写。

    例:touchEvent,用于“方法名”,“变量名”,“参数名”(参数应该避免用单个字符命名。)
    1.2 帕斯卡(pascal)命名法:又称大驼峰命名法,所有单词的第一个字母大写。

    例:TouchEvent,用于“接口名”、“类名”。
    1.3 下划线命名法:单词与单词间用下划线做间隔。

    例:touch_event,用于“常量名”命名(字母全大写载用下划线命名,如:TOUCH_DOWN)、“资源文件”、“控件”及“布局文件”(字母小写)等。

    1.4.其他。

    包(package): 采用反写域名命名规则,即com.xx.xxx.xxxx形式,如:com.tencent.qq.activitys

    全部使用小写字母。一级包名为com,二级包名为xx(一般为公司或个人域名),三级包名根据应用进行命名,四级包名为功能模块名。

    二:源文件结构

    一个源文件包含(按顺序地):

    1. 许可证或版权信息(如有需要)
    2. package语句
    3. import语句
    4. 一个顶级类(只有一个)

    以上每个部分之间用一个空行隔开。

    2.1许可证或版权信息

    如果一个文件包含许可证或版权信息,那么它应当被放在文件最前面。插入版权信息参考

     2.2 import语句

    import不要使用通配符*,即引入同一个包下面多个class的偷懒写法。一般不建议这样写。

    import语句可分为以下几组,按照这个顺序,每组由一个空行分隔:

    1. 所有的静态导入独立成组
    2. com.google imports(仅当这个源文件是在com.google包下)
    3. 第三方的包。每个顶级包为一组,字典序。例如:android, com, junit, org, sun
    4. java imports
    5. javax imports

    组内不空行,按字典序排列。

    2.3 类声明

    只有一个顶级类声明(在与他同名的源文件中)

    注:1.类成员顺序:每个类应该以某种逻辑去排序它的成员(最好不要简单的按照时间顺序添加到成员最后)。

    2.当一个类有多个构造函数,或是多个同名方法,这些函数/方法应该按顺序出现在一起,中间不要放进其它函数/方法。

    三、格式

    3.1大括号

    大括号与if, else, for, do, while语句一起使用,即使只有一条语句(或是空),也应该把大括号写上。

    对于非空块和块状结构:

    • 左大括号前不换行
    • 左大括号后换行
    • 右大括号前换行
    • 如果右大括号是一个语句、函数体或类的终止,则右大括号后换行; 否则不换行。例如,如果右大括号后面是else或逗号,则不换行。
    return new MyClass() {
      @Override public void method() {
        if (condition()) {
          try {
            something();
          } catch (ProblemException e) {
            recover();
          }
        }
      }
    };

    花括号不要单独一行,和它前面的代码同一行。而且,花括号与前面的代码之间用一个空格隔开。

    public void method() { // Good 
    
    } 
    
    public void method()
    { // Bad
    }  
    
    public void method(){ // Bad
    
    } 

    一个空的块状结构里什么也不包含,大括号可以简洁地写成{},不需要换行。例外:如果它是一个多块语句的一部分(if/else 或 try/catch/finally) ,即使大括号内没内容,右大括号也要换行。

    示例:

    void doNothing() {}

    3.2 空格使用

    1.if、else、for、switch、while等逻辑关键字与后面的语句留一个空格隔开。

    // Good
    if (booleanVariable) {
        
    } else {
        
    }
    
    // Bad
    if(booleanVariable) {
        
    }else {
        
    }

    2.运算符两边各用一个空格隔开

    int result = a + b; //Good, = 和 + 两边各用一个空格隔开
    int result=a+b; //Bad,=和+两边没用空格隔开

    3.方法的每个参数之间用一个空格隔开。

    public void method(String param1, String param2); // Good,param1后面的逗号与String之间隔了一个空格
    method(param1, param2); // Good,方法调用时,param1后面的逗号与param2之间隔了一个空格
    method(param1,param2); // Bad,没有用一个空格隔开

    3.3 空行的使用

    将逻辑相关的代码段用空行隔开,以提高可读性。空行也只空一行,不要空多行。在以下情况需用一个空行:

    • 两个方法之间
    • 方法内的两个逻辑段之间
    • 方法内的局部变量和方法的第一条逻辑语句之间
    • 常量和变量之间

    3.4 当一个表达式无法容纳在一行内时,可换行显示,另起的新行用8个空格缩进。

    String str = String.format("%.3f,%.3f,%.3f,", bandGyroscopeEvent.getAngularVelocityX(),
            bandGyroscopeEvent.getAngularVelocityY(), bandGyroscopeEvent.getAngularVelocityZ()) + strTimestamp + "\n";

    3.5每次只声明一个变量

    不要使用组合声明,比如

    int a, b;//bad
    
    //good
    int a;
    int b;

    3.6 量Android Studio中格式化代码快捷键

    CTRL + ALT + L (Win)
    OPTION + CMD + L (Mac)

    3.7 枚举类

    很多经典的Java书已经看到推荐使用枚举来代替int常量了,但是在Android开发中不建议使用枚举,特别是大型的App中,能不用则不用。因为它会牺牲执行的速度和并大幅增加文件体积。也是性能优化中减少OOM(内存优化)的一个方面。Android总使用枚举注解代替枚举优化代码。

    3.8补充

    文字大小的单位统一用sp,元素大小的单位统一用dp。

    应用中的字符串统一在strings.xml中定义,然后在代码和布局文件中引用。

    颜色值统一在colors.xml中定义,然后在代码和布局文件中引用。另外,不要在代码和布局文件中引用系统的颜色,除了透明。

    四、注解

    4.1文件头注释

    文件顶部统一添加版权声明,声明的格式如下:

    /**
     * Copyright (c) Microsoft Corporation All rights reserved.  
     */

    4.2 类和接口注释

    类和接口统一添加javadoc注释,格式如下:

    /**
     * 类或接口的描述信息
     *
     * @author ${USER}
     * @date ${DATE}
     */

    4.3 方法注释

    下面几种方法,都必须添加javadoc注释,说明该方法的用途和参数说明,以及返回值的说明。

    • 接口中定义的所有方法
    • 抽象类中自定义的抽象方法
    • 抽象父类的自定义公用方法
    • 工具类的公用方法
    /**
     * 登录
     *
     * @param loginName 登录名
     * @param password  密码
     * @param listener  回调监听器
     */
    public void login(String loginName, String password, ActionCallbackListener<Void> listener);

    4.4 变量和常量注释

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

    本随笔参考Google Java编程风格指南

  • 相关阅读:
    hive表增量抽取到oracle数据库的通用程序(二)
    java进程的守护进程脚本
    hadoop2.7节点的动态增加与删除
    hive表增量抽取到oracle数据库的通用程序(一)
    arduino 驱动电调
    arduino IO口
    通过电机编码器AB相输出确定电机转向
    Wifi小车资料
    winform 按键控制
    vs2010 EF4.0 访问mysql
  • 原文地址:https://www.cnblogs.com/JamesWang1993/p/8185062.html
Copyright © 2011-2022 走看看