1.IDE选择

  1. # 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 异常后,如果需要回滚事务,一定要注意手动回滚事务