文件组织 1文件名
Java源文件以其顶层的类名来命名,区分大小写,文件扩展名为 " .java " 。
2源文件结构
源文件应该按如下顺序布局 ( 如果有该部分内容 ) : 1、文件头注释;不强制要求按照此规范处理 2、package 语句; 3、import 语句; 4、类或接口声明 / 实现;
3一个文件只定义一个类
为方便程序的阅读与代码的维护,一个源文件中只定义一个类,内部类不受此限制。
排版 Java 代码总的排版风格要求是代码清晰易读,便于 Review 和维护。 1缩进
不强制按照此规范改造 代码块要采用缩进风格编写, 缩进采用 4 个空格 , 不允许使用 Tab 缩进 。 在函数体的开始、类和接口的定义、以及 if、else、for、do、while、switch、case、try、catch、finally等语句中的代码或者static、synchronized等代码块中都要采用上述缩进方式。 示例: 【正确用法】
代码语言:javascript复制if (a > b) {
doSomething();
}
2大括号
不强制按照此规范改造 1、左大括号前不换行,括号后换行; 2、右大括号前换行,与引用他们的语句对齐; 3、如果右大括号是一个语句、函数体或类的终止,则在右大括号后换行,否则不换行; 4、如果大括号中没有语句,且右大括号后也没有语句时,则右大括号前不换行,与左大括号处于同一行; 示例: 【正确用法】
代码语言:javascript复制if (a > b) {
doSomething();
}
if (a > b) {
doSomething();
} else {
doSomething();
}
void doNothing() {}
3换行
不强制按照此规范改造 1、一行代码的长度不应该超出 120 个字节,超长的代码应该换行; 2、如果换行,应该遵循如下原则: 在逗号 ‘,’ 后换行; 在较低优先级操作符前换行,操作符位于新行之首; 采用适当缩进保证代码清晰易读; 方法调用的点符号与下文一起换行; 在括号前不要换行; 示例: 【正确用法】
代码语言:javascript复制/* 不足 120 字节时,不换行 */
someMethod(l o ng Expression1, long Expression2, long Expression3);
/* 超过 120 字节时,需要换行,换行后要使代码清晰易读 */
someMethod(l o ng Expression1,
l o ng Expression2,
l o ng Expression3,
l o ng Expression4,
l o ng Expression5);
/* 不足 120 字节时,不换行 */
longName1 = longName2 longName3 longName4;
/* 超过 120 字节时,需要换行,换行后要使代码清晰易读 */
longName1 = longName2
(longName3 longName4 – longName5)
(4 longName6);
StringBuilder strBuilder = new StringBuilder();
strBuilder.append("userName=").append(userName)
.append("&address=").append(address);
4空行
不强制按照此规范改造 下列 情况应该使用空行以使代码结构清晰,提高代码可读性: 1、4.2 章节 列举的源文件结构块之间; 2、类属性和类方法之间; 3、两个方法之间; 4、方法内的局部变量和第一条语句之间; 5、方法内的逻辑段之间; 6、注释之前 ( 文件头注释除外 ) ; 示例: 【正确用法】
代码语言:javascript复制package com.dtdrea m .client;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
public class UserInfo {
private String usrName;
private String usrAddr;
public userInfo(String usrName, String usrAddr) {
this.usrName = usrName;
this.usrAddr = usrAddr;
}
...
}
5空格
不强制按照此规范改造 下列位置应该使用空格以使代码结构清晰,提高代码可读性: 1、左大括号前; 2、如果右大括号后面有语句,右大括号与后面语句之间; 3、关键字 (if 、 for 、 while 、 switch 、 catch 等 ) 和左括号 ‘(’ 之间; 4、二元操作符前后都需要有空格, ‘.’ 除外; 5、参数列表中的逗号 ‘,’ 后面; 6、for 循环中的表达式之间,分号 ‘;’ 后面; 7、foreach 循环中冒号 ‘:’ 前后; 8、方法名 ( 包括声明和调用 ) 和左括号 ‘(’ 之间 不需要 空格; 9、小括号与内部字符之间 不需要 空格; 10、没有必要 增加若干空格来使某一行的字符与上一行对应位置的字符对齐。 11、多行注释中,换行后星号 ‘’ 之前至少放置一个空格,为实现与首行注释的星号 '’ 对齐; 12、注释星号 ‘*’ 与注释内容 如果处于同一行,两者 之间放置一个空格; 13、注释的双斜线与注释内容之间有且仅有一个空格; 示例: 【错误用法】
代码语言:javascript复制/ / 小括号 与内部字符间不需要空格
if ( a == b )
// 没有 必要追求多行 对齐
int a = 3;
long b = 4L;
StringBuilder sb = new StringBuilder();
【正确用法】
代码语言:javascript复制for (int i = 0; i < 10; i ) {
a = i;
}
for (String usrName : usrList) {
usrAge = usrInfoClass.getUsrAge(usrName);
usrInfoClass.showUser(usrName, usrAge);
}
int a = 3;
long b = 4L;
StringBuffer sb = new StringBuffer();
6声明 建议按照此规范处理 1、每行最多声明一个变量; 示例: 【错误用法】
代码语言:javascript复制int a, b;
【正确用法】
代码语言:javascript复制int a = 0;
int b = 0;
2、定 义数组时,方括号 " [] " 是类型的一部分,所以方括号 " [] " 应放在数据类型后,不要放在变量名后; 示例: 【错误用法】
代码语言:javascript复制byte rcvBuf [] = new byte[MAX_RECV_BUF_SIZE];
【正确用法】
代码语言:javascript复制byte [] rcvBuf = new byte[MAX_RECV_BUF_SIZE];
3、如果有多个修饰符,修饰符按照如下顺序排列:
代码语言:javascript复制public protected private abstract static final transient volatile synchronized native strictfp
示例: 【 错误用法】
代码语言:javascript复制public final static int MAX_USER_CNT = 1024;
【正确用法】
代码语言:javascript复制public static final int MAX_USER_CNT = 1024;
7类成员排列顺序
不强制按照此规范改造 类成员不要交叉放置,不同存取范围的属性或者方法也尽量不要交叉放置,推荐按照如下顺序排列:
代码语言:javascript复制类定义 {
静态成员变量 / Static Fields
静态初始化块 / Static Initializers
成员变量 / Fields
初始化块 / Initializers
构造器 / Constructors
静态成员方法 / Static Methods
成员方法 / Methods
重载自Object的方法如toString(), hashCode() 和main方法
类型(内部类) / Types(Inner Classes)
同等的类型,按public, protected, private的顺序排列。
}