密级: 内部公开
DKBAXXXX-2001.12
编码规范
6.
异常捕获后,如果不对该异常进行处理,则应该纪录日志或者
ex.printStackTrace() 。
说明:若有特殊原因必须用注释加以说明。 示例:
try {
//.... ... }
catch (IOException ioe) {
ioe.printStackTrace (); }
7.
自己抛出的异常必须要填写详细的描述信息。
说明:便于问题定位。 示例:
throw new IOException(\
8.
运行期异常使用RuntimeException的子类来表示,不用 在可能抛出异
常的方法声明上加throws子句。非运行期异常是从Exception继承而来的,必须在方法声明上加throws子句。 说明:
非运行期异常是由外界运行环境决定异常抛出条件的异常,例如文件操作,可能受权限、磁盘空间大小的影响而失败,这种异常是程序本身无法避免的,需要调用者明确考虑该异常出现时该如何处理方法,因此非运行期异常必须有throws子句标出,不标出或者调用者不捕获该类型异常都会导致编译失败,从而防止程序员本身疏忽。
2005-10-15, 11:40:39
36
密级: 内部公开
DKBAXXXX-2001.12
编码规范
运行期异常是程序在运行过程中本身考虑不周导致的异常,例如传入错误的参数等。抛出运行期异常的目的是防止异常扩散,导致定位困难。因此在做异常体系设计时要根据错误的性质合理选择自定义异常的继承关系。
还有一种异常是Error 继承而来的,这种异常由虚拟机自己维护,表示发生了致命错误,程序无法继续运行例如内存不足。我们自己的程序不应该捕获这种异常,并且也不应该创建该种类型的异常。
9.
在程序中使用异常处理还是使用错误返回码处理,根据是否有利于程序结
构来确定,并且异常和错误码不应该混合使用,推荐使用异常。
说明:
一个系统或者模块应该统一规划异常类型和返回码的含义。
但是不能用异常来做一般流程处理的方式,不要过多地使用异常,异常的处理效率比条件分支低,而且异常的跳转流程难以预测。
先级。
说明:防止阅读程序时产生误解,防止因默认的优先级与设计思想不符而导致程序出错。 示例:
10.
*注意运算符的优先级,并用括号明确表达式的操作顺序,避免使用默认优
下列语句中的表达式
word = (high << 8) | low (1) if ((a | b) && (a & c)) (2) if ((a | b) < (c & d)) (3) 如果书写为
high << 8 | low a | b && a & c a | b < c & d
(1)(2)虽然不会出错,但语句不易理解;(3)造成了判断条件出错。
11.
*避免使用不易理解的数字,用有意义的标识来替代。涉及物理状态或者含
有物理意义的常量,不应直接使用数字,必须用有意义的静态变量来代替。 示例:如下的程序可读性差。
2005-10-15, 11:40:39
37
密级: 内部公开
DKBAXXXX-2001.12
编码规范
if (state == 0) {
state = 1;
... // program code }
应改为如下形式:
private final static int TRUNK_IDLE = 0; private final static int TRUNK_BUSY = 1; private final static int TRUNK_UNKNOWN = -1;
if (state == TRUNK_IDLE) {
state = TRUNK_BUSY; ... // program code }
12.
数组声明的时候使用 int[] index ,而不要使用 int index[] 。
说明:使用int index[] 格式使程序的可读性较差
示例:
如下程序可读性差:
public int getIndex()[] {
.... }
如下程序可读性好:
public int[] getIndex() {
.... }
13.
调试代码的时候,不要使用 System.out 和 System.err 进行打印,应该使
用一个包含统一开关的测试类进行统一打印。
说明:代码发布的时候可以统一关闭调试代码,定位问题的时候又可以打开开关。
38
2005-10-15, 11:40:39
密级: 内部公开
DKBAXXXX-2001.12
编码规范
14.
用调测开关来切换软件的DEBUG版和正式版,而不要同时存在正式
版本和DEBUG版本的不同源文件,以减少维护的难度。
5.2建议
1.
记录异常不要保存exception.getMessage(),而要记录exception.toString()。
示例:NullPointException抛出时常常描述为空,这样往往看不出是出了什么错。
2.
一个方法不应抛出太多类型的异常。
说明: 如果程序中需要分类处理,则将异常根据分类组织成继承关系。如果确实有很多异常类型首先考虑用异常描述来区别,throws/exception子句标明的异常最好不要超过三个。
3.
异常捕获尽量不要直接 catch (Exception ex),应该把异常细分处理。
4.
*如果多段代码重复做同一件事情,那么在方法的划分上可能存在问题。
说明:若此段代码各语句之间有实质性关联并且是完成同一件功能的,那么可考虑把此段代码构造成一个新的方法。
5.
对于创建的主要的类,最好置入main()函数,包含用于测试那个类的代码 。
说明:主要类包括: 1、能完成独立功能的类,如通讯。 2、具有完整界面的类,如一个对话框、一个窗口、一个帧等。 3、JavaBean 类。 示例: public static void main(String[] arguments) { CreateCircuitDialog circuitDialog1 = new CreateCircuitDialog (null, \ circuitDialog1.setVisible(true); } 2005-10-15, 11:40:39
39
密级: 内部公开
DKBAXXXX-2001.12
编码规范
6.
集合中的数据如果不使用了应该及时释放,尤其是可重复使用的集合。
说明:由于集合保存了对象的句柄,虚拟机的垃圾收集器就不会回收。
7.
*源程序中关系较为紧密的代码应尽可能相邻。
说明:便于程序阅读和查找。
示例:矩形的长与宽关系较密切,放在一起。
rect.length = 10; rect.width = 5;
8.
*不要使用难懂的技巧性很高的语句,除非很有必要时。
说明:高技巧语句不等于高效率的程序,实际上程序的效率关键在于算法。 2005-10-15, 11:40:39
40