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(一般为公司或个人域名),三级包名根据应用进行命名,四级包名为功能模块名。
二:源文件结构
一个源文件包含(按顺序地):
许可证或版权信息(如有需要) 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编程风格指南