1.IDE选择
# Eclipse/IDEA 个人选择
2.JDK版本
# JDK1.7/jdk1.8
3.文件格式
# IDE 的 text file encoding 设置为 UTF-8
# IDE 中文件的换行符使用 Unix 格式,不要使用 windows 格式。
4.源文件结构
# Java 源文件还遵循以下规则:
## 开头注释(列出类名、版本信息、日期和版权声明)
/*
* Classname
*
* Version information
*
* Date
*
* Copyright notice
*/
## 包和引入语句(第一个非注释行是 package 语句。在它之后可以跟 import 语句)
package java.awt;
import java.awt.peer.CanvasPeer;
## 类和接口声明
5.类、方法、参数、变量命名
5.1 类的命名,使用驼峰式命名的规范
类的名字必须由大写字母开头而单词中的其他字母均为小写;
如果类名称由多个单词组成,则每个单词的首字母均应为大写例如TestPage。
由于类是设计用来代表对象的,所以在命名类时应尽量选择名词。
| 后缀名 | 意义 | 举例 |
|---|---|---|
| Service | 表明这个类是个服务类, 里面包含了给其他类提供业务服务的方法 | PaymentOrderService |
| Impl | 这个类是一个实现类,而不是接口 | PaymentOrderServiceImpl |
| Inter | 这个类是一个接口 | LifeCycleInter |
| Dao | 这个类封装了数据访问的方法 | PaymentOrderDao |
| Action | 直接处理页面请求,管理页面逻辑的类 | UpdateOrderListAction |
| Listener | 响应某种事件的类 | PaymentSuccessListener |
| Event | 这个类代表了某种事件 | PaymentSuccessEvent |
| Servlet | 一个Servlet | PaymentCallbackServlet |
| Factory | 生成某种对象工厂的类 | PaymentOrderFactory |
| Adapter | 用来连接某种以前不被支持的对象的类 | DatabaaseLogAdapter |
| Job | 某种按时间运行的任务 | PaymentOrderCanceJob |
| Bean | 这是一个POJO | MenuStateBean |
| Base | 这是一个基类 | ErrorMessageBase |
| Util/Tools | 这是一个工具类 | DataGenerateUtil |
5.2 方法的命名
方法的名字的第一个单词应以小写字母作为开头,后面的单词则用大写字母开头 。
例如: sendMessge方法表示一种行为,它代表一种动作,最好是一个动词后者动词词组或者一个单词为一个动词。
| 前缀名 | 意义 | 举例 |
|---|---|---|
| create | 创建 | createOrder |
| delete | 删除 | deleteOrder |
| add | 添加 | addPaidOrder |
| remove | 删除 | removeOrder |
| init\initialize | 初始化,按时 会做些如获取资源等特殊动作 | initObjectPool |
| destroy | 销毁,按时会做些如释放资源等特殊动作 | destroyObjectPool |
| open | 打开 | openConnection |
| close | 关闭 | closeConnection |
| read | 读取 | readUserName |
| write | 写入 | writeUserName |
| get | 获取 | getName |
| set | 设置 | setName |
| prepare | 准备 | prepareOrderList |
| copy | 复制 | copyCustomerList |
| modify | 修改 | modifyActualToalAmount |
| calculate | 数值计算 | calculateCommission |
| do\run\doRun | 执行某个过程或流程 | doOrderCanelJob |
| dispatch | 判断程序流流程转向 | dispatchUserRequest |
| start | 开始 | starOrderProcessing |
| stop | 结束 | stopOrderProcessing |
| send | 发送某个消息或事件 | sendOrderPaidMessage |
| receive | 接口消息或事件 | receiveOrderPaidMessgae |
| respond | 响应用户动作 | responseOrderListItemClicked |
| find | 查找对象 | findCommission |
| update | 更新对象 | updateCommission |
5.3 常量名,全大写用下划线分割
如:public static final String GAME_COLOR=”RED”;
5.4 当要区别接口类和实现类的时候,可以在类的后面加上“Impl”。
接口类:UserInterface.java 接口实现类:UserInterfaceImp
5.5 包名一律小写,使用小写字母如com.xxx.settlment,不要com.xxx.Settlement;
单词间不要用字符隔开,比如com.xxx.settlment.jsfutil,而不要 com.xxx.settlement.jsf_util。
5.6.所有命名规则必须遵循以下规则:
1)、名称只能由字母、数字、下划线、$符号组成
2)、不能以数字开头
3)、名称不能使用JAVA中的关键字。
4)、坚决不允许出现中文及拼音命名。
6.大括号使用
# 如果是大括号内为空,则简洁地写成{}
// This is acceptable
void doNothing() {}
// This is equally acceptable
void doNothingElse() {
}
# 如果是非空代码块
public static void main(String[] args) {
// 缩进 4 个空格
String say = "hello";
// 运算符的左右必须有一个空格
int flag = 0;
// 关键词 if 与括号之间必须有一个空格,括号内的 f 与左括号,0 与右括号不需要空格
if (flag == 0) {
System.out.println(say);
}
// 左大括号前加空格且不换行;左大括号后换行
if (flag == 1) {
System.out.println("world");
// 右大括号前换行,右大括号后有 else,不用换行
} else {
System.out.println("ok");
// 在右大括号后直接结束,则必须换行
}
}
7.缩进换行
# 单行字符数限制不超过 120 个,超出需要换行
1.第二行相对第一行缩进 4 个空格,从第三行开始,不再继续缩进,参考示例。
2.运算符与下文一起换行。
3.方法调用的点符号与下文一起换行。
4.在多个参数超长,逗号后进行换行。
5.在括号前不要换行,见反例
StringBuffer sb = new StringBuffer();
//超过 120 个字符的情况下,换行缩进 4 个空格,并且方法前的点符号一起换行
sb.append("zi").append("xin")...
.append("huang")...
.append("huang")...
.append("huang");
8.方法参数定义和传入
# 方法参数在定义和传入时,多个参数逗号后边必须加空格
下例中实参的"a",后边必须要有一个空格。
method("a", "b", "c")
9.switch语句
//在一个 switch 块内,每个case要么通过 break/return 等来终止,要么注释说明程序将继续执行到哪一个case为止;
//在一个 switch 块内,都必须包含一个 default 语句并且放在最后,即使它什 么代码也没有。
switch (condition) {
case ABC:
statements;
/* falls through */
case DEF:
statements;
break;
case XYZ:
statements;
break;
default:
statements;
break;
}
10.return 语句
# 一个带返回值的 return 语句不使用小括号"()",除非它们以某种方式使返回值更为显见。例如:
return;
return myDisk.size();
return (size ? size : defaultSize);
11.if, if-else, if else-if else 语句
// if-else语句应该是以下形式
if (condition) {
statements;
}
if (condition) {
statements;
} else {
statements;
}
if (condition) {
statements;
} else if (condition) {
statements;
} else {
statements;
}
//if语句通常使用{}。避免下面容易出错的形式:
if (condition) // 避免!这省略了括号{ }!
statement;
12.for 语句
//for 语句应该是如下形式:
for (initialization; condition; update) {
statements;
}
//空的for语句 (所有工作都在初始化,条件判断,更新子句中完成) 应该是如下形式:
for (initialization; condition; update);
13.try-catch 语句
//try-catch 语句应该是如下格式:
try {
statements;
} catch (ExceptionClass e) {
statements;
}
/*
一个try-catch语句后面也可能跟着一个finally语句,
不论try代码块是否顺利执行完它都会被被行。
*/
try {
statements;
} catch (ExceptionClass e) {
statements;
} finally {
statements;
}
14.注释
# 类、类属性、类方法的注释必须使用 Javadoc 规范,使用/**内容*/格式,不得使用//xxx 方式。
/**
* The Example class provides ...
*/
public class Example {
...
}
# 所有的类都必须添加创建者信息。
# 方法内部单行注释,在被注释语句上方另起一行,使用//注释。方法内部多行注释使用/* */注释,
# 注意 与代码对齐。
if (foo > 1) {
// Do a double-flip.
...
}...
/*
* one
* two
*/
# 所有的枚举类型字段必须要有注释,说明每个数据项的用途
15.日志记录
# 日志文件推荐至少保存 15 天,因为有些异常具备以“周”为频次发生的特点
# 对日志进行分类,错误日志和业务日志尽量分开存放,便于开发人员查看,也便于
通过日志对系统进行及时监控。
# 对 trace/debug/info 级别的日志输出,必须使用条件输出形式或者使用占位符的方式。
16.异常处理
# 不要捕获 Java 类库中定义的继承自 RuntimeException 的运行时异常类.
# 异常不要用来做流程控制,条件控制,因为异常的处理效率比条件分支低。
# 捕获异常与抛异常,必须是完全匹配,或者捕获异常是抛异常的父类。
# 对于非稳定代码的 catch 尽可能进行区分异常类型,再做对应的异常处理
# 有 try 块放到了事务代码中,catch 异常后,如果需要回滚事务,一定要注意手动回滚事务
