编码注意事项:

  • 类中方法定义私有 private修饰。
  • 主流程清楚明了,将子流程抽取,达到业务逻辑清楚明了。
  •  

为确保系统源程序可读性,从而增强系统可维护性,java编程人员应具有基本类似的编程风格,兹制定下述Java编程规范,以规范系统Java部分编程。系统继承的其它资源中的源程序也应按此规范作相应修改。

  1. 适用范围

本文档将作为java编程人员软件开发的编程格式规范。在项目Java部分的编码、测试及维护过程中,要求严格遵守。

  1. 命名规范

定义这个规范的目的是让项目中所有的文档都看起来像一个人写的,增加可读性,减少项目组中因为换人而带来的损失。

  1. Package 的命名

Package 的名字应该都是由一个小写单词组成。示例:unipost.trans

  1. Class 的命名

Class 的名字每个单词必须由大写字母开头而其他字母都小写的单词组成。示例:FileMng

  1. Class 成员的命名

变量、方法、属性:大小写混排的单词组成,首字母小写

示例: functionName、countNum、size

  1. Static Final 变量的命名

Static Final常量:大写单词组成,单词之间使用“_”连接

示例: MAX_INDEX

  1. 前后台变量名称

前台变量 fg_变量名

后台变量 bg_变量名

  1. 参数的命名

参数的名字必须和变量的命名规范一致。

  1. 数组的命名

数组应该总是用下面的方式来命名:

byte[] buffer;

而不是:

byte buffer[];

  1. 方法的参数

使用有意义的参数命名,如果可能的话,使用和要赋值的属性一样的名字:

setCounter(int size)
{
     this.size = size;
}
  1. 缩写

某些通用的缩写可以使用,如:

temp 可缩写为  tmp  ;

message 可缩写为  msg  ;

  1. 标识符命名中应注意的问题
  1. 除局部循环变量外变量名禁止取单个字符

对于变量命名,禁止取单个字符(如i、j、k...),建议除了要有具体含义外,还能表明其变量类型、数据类型等,但i、j、k作局部循环变量是允许的。

说明:变量,尤其是局部变量,如果用单个字符表示,很容易敲错(如i写成j),而编译时又检查不出来,有可能为了这个小小的错误而花费大量的查错时间。

  1. 不用数字定义名字

除非必要,不要用数字或较奇怪的字符来定义标识符。

示例:如下命名,使人产生疑惑。

void set_sls00( BYTE sls );

 

应改为有意义的单词命名

void setUdtMsgSls( BYTE sls );

  1. 用正确的反义词组命名

用正确的反义词组命名具有互斥意义的变量或相反动作的函数等。

说明:下面是一些在软件中常用的反义词组。

add / remove begin / end create / destroy
insert / delete first / last        get / set
increment / decrement put / get add / delete       
lock / unlock       open / close min / max
old / new start / stop next / previous
source / target show / hide send / receive
source / destination cut / paste up / down
示例:
int  minSum;
int  maxSum;
int  addUser( BYTE *userName );
int  deleteUser( BYTE *userName );
  1. 避免使用

应避免使用_EXAMPLE_TEST_之类以下划线开始和结尾的定义。

  1. 样式
  1. Java 文件样式

所有的 Java(*.java) 文件都必须遵守如下的样式规则

  1. 版权信息

版权信息必须在 java 文件的开头,示例:

/*
* -------------------------------------------------------
* Copyright (c) 2003, 国家邮政局
* All rights reserved.
* 
* FileName:filename.java
* Description:简要描述本文件的内容
* History:
* Date           Author               Desc
* -------------------------------------------------------
*/
1. Package/Imports
package 行要在 import 行之前,import 中标准的包名要在本地的包名之前,而且按照字母顺序排列。如果 import 行中包含了同一个包中的不同子目录,则建议用 * 来处理。
package com.nantian;
import java.io.*;
import java.util.Observable;
import translator;
这里 java.io.* 使用来代替InputStream and OutputStream 的。
1. Class的样式
1. Class的定义
包含了在不同的行的 extends 和 implements
public class CounterSet extends Observable
implements Cloneable
1. Class Fields
类的成员变量:
/**
 * Packet counters
 */
protected int[] packets;
public 的成员变量一定要有注释而且必须生成文档(JavaDoc)。
proceted、private和 package 定义的成员变量如果名字含义明确的话,可以没有注释。
1. 构造函数
构造函数,它应该用递增的方式写(比如:参数多的写在后面)。示例:
public CounterSet(int size)
{
  this.size = size;
}
public CounterSet(int size,String name)
{
  this.size = size;
  this.name = name;
}
1. 克隆方法
如果这个类是可以被克隆的:
public Object clone()
{
try
{
CounterSet obj = (CounterSet)super.clone();
obj.packets = (int[])packets.clone();
obj.size = size;
return obj;
}
catch(CloneNotSupportedException e)
{
throw new InternalError("Unexpected CloneNotSUpportedException: "+ e.getMessage());
}
}
  1. 类成员变量和方法的编写顺序

建议编写顺序为:

public  protected  private
final    static     transient
  1. main 方法

如果main(String[]) 方法已经定义了, 那么它应该写在类的底部。

  1. 代码样式

代码应该用 unix 的格式,而不是 windows 的(比如:回车变成回车+换行)