欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Java编程规范

程序员文章站 2022-06-22 12:46:46
从一开始接触编程就多次听到编程得养成好的编码习惯。的确,不让好的编码成为习惯,也就只能在随意的代码风格里放纵了(网上浏览到的代码是有这样的吧)。 在网上也看了很多人的总结,学到很多。将其中的部分进行汇总,这次的随笔大部分只是文字的搬运工,如有误还请指正。 一.标识符命名(尽量以最少的字符表达完整的含 ......

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

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

 

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

常见的英文单词缩写:

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(一般为公司或个人域名),三级包名根据应用进行命名,四级包名为功能模块名。

 

二:源文件结构

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

许可证或版权信息(如有需要) package语句 import语句 一个*类(只有一个)

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

2.1许可证或版权信息

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

 2.2 import语句

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

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

所有的静态导入独立成组 com.google imports(仅当这个源文件是在com.google包下) 第三方的包。每个*包为一组,字典序。例如:android, com, junit, org, sun java imports 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编程风格指南