1、广东技术股份有限公司 1 编 程 规 范 文件编号HW-SP-IMPT-G01 文件状态 草稿 正式发布 正在修改 当前版本V1.0 拟 制张三日期年月日 审 核李四日期年月日 批 准王五日期年月日 发布日期年月日 生效日期年月日 广东技术股份有限公司 2 广 东技 术 股 份 有 限 公 司 修订历史记录 A - 增加M - 修订D - 删除 变更版本号日期变更类型 (A*M*D) 修改人摘要备注 1.0A建立编程规范 广东技术股份有限公司 3 广东技术股份有限公司 4 目录 1目的.5 2使用范围.5 3C/C+编程规范.5 3.1文件结构.5 3.2程序的版式.10 3.3命名规则.18
2、 3.4缩进规则.23 4JAVA 编程规范.25 4.1代码组织与风格.25 4.2注解.26 4.3命名.29 4.4声明.31 4.5表达式和语句.32 4.6错误处理和异常事件.33 4.7可移植性.33 4.8复用.33 广东技术股份有限公司 5 1目的 定义组织的 C/C+,JAVA 编程规范,以提高程序的可读性、可靠性。 2使用范围 适合于公司采用 C/C+、JAVA 编程语言开发的所有软件项目。 3C/C+编程规范 3.1文件结构 每个 C/C+程序通常分为两个文件。一个文件用于保存程序的声明(declaration) , 称为头文件。另一个文件用于保存程序的实现(implem
3、entation) ,称为定义(definition) 文件。 C/C+程序的头文件以“.h”为后缀,C 程序的定义文件以“.c”为后缀,C+程序 的定义文件通常以 “.cpp” 为后缀 (也有一些系统以 “.cc” 或 “.cxx” 为后缀, 这里以 Windows 平台为准) 。 3.1.1版权和版本的声明 版权和版本的声明位于头文件和定义文件的开头(参见示例 3-1) ,主要内容有: 版权信息 文件名称、标识符、摘要 当前版本号、作者/修改者、完成日期 版本历史信息 说明:Description 一项描述本文件的内容、功能、内部各部分之间的关系及本文件与 其它文件关系等。History
4、是修改历史记录列表,每条修改记录应包括修改日期、修改者及 修改内容简述。示例: 广东技术股份有限公司 6 /* *Copyrights 2006,东信和平智能卡股份有限公司 *XXXXXX 项目组 *All rights reserved. * *Filename: *Sample.cpp *Indentifier: *EP-PRO-SRC-020620-TST(这里只作为示例) *Description: *这里只作为示例 *Version: *V1.0 *Author: *张三 *Finished: *2006 年 06 月 07 日 *History: *张三2002/06/01V0.9
5、 文件创建 *张三2002/06/07V1.0 修改了 */ 广东技术股份有限公司 7 /* *Copyrights 2006,东信和平智能卡股份有限公司 *XXXXXX 项目组 *All rights reserved. * *Filename: *这里填入该文件的名称 *Indentifier: *这里填入该文件的标识(参见软件配置管理) *Description: *这里填入该对文件内容的简要描述(一般情况下用中文) *Version: *Vx.x *Author: *填入作者姓名(一般情况下用中文) *Finished: *xxxx 年 xx 月 xx 日 *History: *(作者
6、日期版本说明) *文件修订历史纪录(一般情况下用中文) */ / 版权和版本声明见示例 3-1,此处省略。 #ifndef Sample_H/ 防止 Sample.h 被重复引用 #define Sample_H #include / 引用标准库的头文件 #include “MyClass.h”/ 引用非标准库的头文件 void FunctionX();/ 全局函数声明 class Sample/ 类结构声明 广东技术股份有限公司 8 3.1.2头文件的结构 头文件由三部分内容组成: 头文件开头处的版权和版本声明(参见示例 3-1) / 版权和版本声明见示例 3-1,此处省略。 #includ
7、e “Sample.h”/ 引用头文件 void FunctionX()/ 全局函数的实现体 void Sample:MethodX() / 类成员函数的实现体 示例 3-4 C+/C 定义文件的结构 示例 3-2版本和版权的声明 广东技术股份有限公司 9 预处理块 函数和类结构声明等 假设头文件名称为 Sample.h,头文件的结构参见示例 3-3 【规则 3-2-1】为了防止头文件被重复引用,应当用 ifndef/define/endif 结构产生预 处理块 【规则 3-2-2】用 #include 格式来引用标准库的头文件(编译器将从 标准库目录开始搜索) 【规则 3-2-3】用 #in
8、clude “filename.h” 格式来引用非标准库的头文件(编译器 将从用户的目录开始搜索) 【建议 3-2-1】头文件中只存放“声明”而不存放“定义” 在 C+ 语法中,类的成员函数可以在声明的同时被定义,并且自动成为内联函数。 这虽然会带来书写上的方便,但却造成了风格不一致,弊大于利。建议将成员函数的定义与 声明分开,不论该函数体有多么小 【建议 3-2-2】 不提倡使用全局变量, 尽量不要在头文件中出现象 extern int value 这 类声明 3.1.3定义文件的结构 定义文件有三部分内容: (1)定义文件开头处的版权和版本声明(参见示例 3-1) (2)对一些头文件的引用
9、 (3)程序的实现体(包括数据和代码) 假设定义文件的名称为 Sample.cpp,定义文件的结构参见示例 3-4。 3.1.4头文件的作用 早期的编程语言如 Basic、Fortran 没有头文件的概念,C/C+语言的初学者虽然会用 使用头文件,但常常不明其理。这里对头文件的作用略作解释: 示例 3-3C/C+头文件的结构 广东技术股份有限公司 10 (1)通过头文件来调用库功能。在很多场合,源代码不便(或不准)向用户公布, 只要向用户提供头文件和二进制的库即可。用户只需要按照头文件中的接口声 明来调用库功能,而不必关心接口怎么实现的。编译器会从库中提取相应的代 码。 (2)头文件能加强类型
10、安全检查。如果某个接口被实现或被使用时,其方式与头文 件中的声明不一致,编译器就会指出错误,这一简单的规则能大大减轻程序员 调试、改错的负担。 3.1.5目录结构 如果一个软件的头文件数目比较多(如超过十个) ,通常应将头文件和定义文件分别保 存于不同的目录,以便于维护。 例如可将头文件保存于 include 目录,将定义文件保存于 source 目录(可以是多级 目录) 。 如果某些头文件是私有的,它不会被用户的程序直接引用,则没有必要公开其“声明” 。 为了加强信息隐藏,这些私有的头文件可以和定义文件存放于同一个目录。 3.2程序的版式 版式虽然不会影响程序的功能,但会影响可读性。程序的版
11、式追求清晰、美观,是程序 风格的重要构成因素。 可以把程序的版式比喻为“书法” 。好的“书法”可让人对程序一目了然,看得兴致勃 勃。差的程序“书法”如螃蟹爬行,让人看得索然无味,更令维护者烦恼有加。请程序员们 学习程序的“书法” ,弥补大学计算机教育的漏洞,实在很有必要。 3.2.1空行 空行起着分隔程序段落的作用。 空行得体 (不过多也不过少) 将使程序的布局更加清晰。 空行不会浪费内存,虽然打印含有空行的程序是会多消耗一些纸张,但是值得。所以不要舍 不得用空行。 【规则 2-3-1】在每个类声明之后、每个函数定义结束之后都要加空行。参见示例 2-1 (a) 广东技术股份有限公司 11 【规
12、则 2-3-2】在一个函数体内,逻揖上密切相关的语句之间不加空行,其它地方应 加空行分隔。参见示例 2-1(b ) / 空行 void Function1() / 空行 void Function2() / 空行 void Function3() / 空行 while (condition) statement1; / 空行 if (condition) statement2; else statement3; / 空行 statement4; 广东技术股份有限公司 12 3.2.2代码行 【规则 2-2-1】一行代码只做一件事情,如只定义一个变量,或只写一条语句。这样 的代码容易阅读,并且方
13、便于写注释。 【规则 2-2-2】if、for、while、do 等语句自占一行,执行语句不得紧跟其后。不论 执行语句有多少都要加。这样可以防止书写失误。 【建议 2-2-1】尽可能在定义变量的同时初始化该变量(就近原则) 如果变量的引用处和其定义处相隔比较远, 变量的初始化很容易被忘记。 如果引用了未 被初始化的变量,可能会导致程序错误。本建议可以减少隐患。例如: int width = 10;/ 定义并初绐化 width int height = 10; / 定义并初绐化 height int depth = 10;/ 定义并初绐化 depth 示例 2-2(a)为风格良好的代码行,示例
14、2-2(b)为风格不良的代码行。 int width; / 宽度 int height; / 高度 int depth; / 深度 int width, height, depth; / 宽度高度深度 x = a + b; y = c + d; z = e + f; X a + b; y = c + d; z = e + f; if (width height) dosomething(); if (width =” 、 “=” 、 “+” 、 “*” 、 “%” 、 “ i10; i+)和 if (a=b) i10; i+)/ 良好的风格 for(i=0;i10;i+)/ 不良的风格 for
15、 (i = 0; I 10; i +)/ 过多的空格 x = a b ? a : b;/ 良好的风格 x=aFunction();/ 不要写成b - Function(); 3.2.4对齐 【规则 2-4-1】程序的分界符和应独占一行并且位于同一列,同时与引用它 们的语句左对齐。 【规则 2-4-2】 之内的代码块在右边数格处左对齐。 示例 2-4(a)为风格良好的对齐,示例 2-4(b)为风格不良的对齐。 void Function(int x) / program code void Function(int x) / program code if (condition) / progr
16、am code else / program code if (condition) / program code else / program code for (initialization; condition; update) / program code for (initialization; condition; update) / program code While (condition) / program code while (condition) / program code 示例2-3 代码行内的空格 广东技术股份有限公司 15 如果出现嵌套的,则使用缩进对齐,如:
17、 3.2.5长行拆分 【规则 2-5-1】代码行最大长度宜控制在 70 至 80 个字符以内。代码行不要过长,否 则眼睛看不过来,也不便于打印。 【规则 2-5-2】长表达式要在低优先级操作符处拆分成新行,操作符放在新行之首(以 便突出操作符) 。拆分出的新行要进行适当的缩进,使排版整齐,语句可读。 if (very_longer_variable1 = very_longer_variable12) / 类的成员函数 【规则 3-3-9】用正确的反义词组命名具有互斥意义的变量或相反动作的函数等。例 如: int minValue; int maxValue; int SetValue();
18、int GetValue(); 【建议 3-3-1】尽量避免名字中出现数字编号,如 Value1,Value2 等,除非逻辑上的 确需要编号。 这是为了防止程序员偷懒, 不肯为命名动脑筋而导致产生无意义的名字 (因 为用数字编号最省事) 。 3.3.2简单的 Windows 应用程序命名规则 本文对“匈牙利”命名规则做了合理的简化,下述的命名规则简单易用,比较适合于 Windows 应用软件的开发。 【规则 3-2-1】类名和函数名用大写字母开头的单词组合而成。例如: class Node;/ 类名 class LeafNode;/ 类名 void Draw(void);/ 函数名 void
19、SetValue(int value); / 函数名 【规则 3-2-2】变量和参数用小写字母开头的单词组合而成。例如: BOOL flag; int drawMode; 【规则 3-2-3】常量全用大写的字母,用下划线分割单词。例如: const int MAX = 100; const int MAX_LENGTH = 100; 广东技术股份有限公司 21 【规则 3-2-4】静态变量加前缀 s_(表示 static) 。例如: void Init() static int s_initValue;/ 静态变量 【规则 3-2-5】如果不得已需要全局变量,则使全局变量加前缀 g_(表示 g
20、lobal) 。 例如: int g_howManyPeople; / 全局变量 int g_howMuchMoney; / 全局变量 【规则 3-2-6】类的数据成员加前缀 m_(表示 member) ,这样可以避免数据成员与 成员函数的参数同名。例如: void Object:SetValue(int width, int height) m_width = width; m_height = height; 【规则 3-2-7】类的数据成员加前缀 h 表示变量是一个 HANDLE 类型的句柄。 例如:hFIleHandle 3.3.3C+Builder 控件命名规则 分类前缀类控件类型
21、单元/容器fm_TForm窗体 fa_TFrameFrame panel_TPanel面板 按钮btn_HWutton下拉式列表框 bbtn_HWiHWutton图片按钮 广东技术股份有限公司 22 sbtn_TSpeedButton快速按钮 文本/输入/ 选择 lab_TLabel标签 ed_TEdit文本输入框 red_TRichEditRich Edit 控件 memo_TMemoMemo 控件 chk_TCheckBoxCheckBox lb_TLisHWox列表框 rd_TRadioButtonRadioButton 图像img_TImage图片框 imgl_TImageList图片
22、列表 cht_TChart图表 菜单mm_TMainMenu主菜单 mi_TMenuItem菜单项 pop_TPopMenu弹出菜单 工具栏HW_TToolBar工具栏 HWtn_TToolButton工具条按钮 cb_TCoolBarCoolBar 网格sg_TStringGrid网格 asg_TAdvStringGridAdvStringGrid(第三方控件) 布局/信息组 织 lv_TListViHW列表显示控件 tv_TTreeViHW树型结构显示控件 tabc_TTabControl分页、选项卡 pagc_TPageControl spl_TSplitter分隔条 scr_TScro
23、llBar滚动条 广东技术股份有限公司 23 stat_TStatusBar状态栏 3.4缩进规则 在各个编译环境中把 Tab 键的长度改为 4 个空格长。 大括号单独占一行,但是不缩进。 SQL 语句的缩进风格 (1)查询列表的书写风格(与注释综合考虑) 一行有多列,超过 80 个字符时,基于列对齐原则,采用下行缩进 SELECT col1,col2,. colm,coln,. INTO v_col1,v_col2,. v_colm,. (2)WHERE 子句的书写规范 每个条件占一行 嵌套查询条件书写规范 WHERE con1 AND con2 AND col3 NOT IN ( SELE
24、CT col3 FROM t2 WHERE .); 控制结构的缩进 程序应以缩进形式展现程序的块结构和控制结构。 下列保留字的下一行缩进四格 ,BEGIN、THEN、ELSE、ELSIF、LOOP 广东技术股份有限公司 24 下列保留字所在行前移四格 END、ELSE、ELSIF、END IF、END LOOP 缩进的限制 (1)每次缩进标准为 4 个空格,可使用 TAB 键。 (2)任何一个程序最大行宽不得超过 80 列,第一行续行语句缩进四格,后续续行语句与 第一行续行语句对齐。长语句的下一语句以长语句为对齐基准参照上面规定执行。 广东技术股份有限公司 25 4Java 编程规范 4.1代
25、码组织与风格 4.1.1缩进: 代码中以 TAB 4 缩进。 4.1.2长度: 单个函数长度不应大于 100 行(不包括注释行) ,超过时应当考虑使用子函数。 4.1.3行宽: 程序最大行宽一般不超过 80 列,超过者应折行书写(因编译器、工具兼容问题可以不 折行) 。 4.1.4间隔: 类、方法等之间应以空行相隔,以增加可读性。 4.1.5风格: 对每个文件、类、接口、方法等都应有较详细的注释。 类、接口、方法的左括号换行并独占一行; 各控制、条件、循环的语句级别的左括号紧跟该代码段最后一句后,不单独占行。 较长的方法以及类、接口等的右括号后应使用/end .标识其结束。 具体参考如下例:
26、/* * 文件、包注释 */ package user; /* * 引用包注释 */ import java.uitl.*; /* * 类注释 */ 广东技术股份有限公司 26 public class User /变量注释 private Name; /* * 方法注释 */ public String getUserName(String userID) String userName = nHW String(); /语句注释 if ( null != userID) /条件注释 userName = UserBean.getUserName(userID); /end if retur
27、n userName; /end getUserName end User 4.2注解 4.2.1基本原则 1注释应该增加代码的清晰度。代码注释的目的是要使代码更易于被同时参与程序设计的 开发人员以及其他后继开发人员理解。 2如果你的程序不值得注释,那么它也很可能也不值得运行。 3避免使用装饰性内容。 4保持注释的简洁。 5注释信息不仅要包括代码的功能,还应给出原因。 6尽量不使用行末注释。 4.2.2文件、包注解 在每个文件、包的头部都应该对该文件的功能、作用、作者、版权以及修改记录等进行 注解。参考如下模板: 广东技术股份有限公司 27 /* * title任务队列管理类 * versio
28、n1.0 * copyrightCopyright (c) 2003-4-18 * companyEastcompeacecomSmart Card Co., Ltd. * authorJack * date2003-04-18 * description 管理任务队列 * history *1. 2005-05-08Jack完成该类的编码 *2. 2005-05-09david添加 getProperties() */ 4.2.3类、接口注解 在类、接口定义之前当对其进行注释,包括类、接口的目的、作用、功能、继承于何种 父类,实现的接口以及重大的修改记录等等,基本依据标准的 JavaDoc
29、规范。 4.2.4方法注解 依据标准 JavaDoc 规范对方法进行注释,以明确该方法功能、作用、各参数含义以及 返回值等。复杂的算法用/*/在方法内注解出。如: /* * YHPCZLam sql SQL 语句 * return ResultSet 结果集 * throws SQLException SQL 异常 * description 执行查询。 * 该方法调用 Statement 的 executeQuery(sql)方法并返回 ResultSet 结果集。 */ public ResultSet executeQuery(String sql) throws SQLExceptio
30、n 4.2.5语句注解 应对重要的变量加一注释,以说明其含义等。 应对不易理解的分支条件表达式加注释。不易理解的循环,应说明出口条件。过长的方 法实现,应将其语句按实现的功能分段加以概括性说明。 广东技术股份有限公司 28 对于异常处理注明正常情况及异常情况或者条件, 并说明当异常发生时程序当如何处理。 单行语句注解应当比其注解的语句缩进两个字符。 4.2.6注解参考表 项目注释部分 参数 参数类型 参数用来做什么 任何约束或前提条件 示例 字段/属性 字段描述 注释所有使用的不变量 示例 并行事件 可见性决策 类 类的目的 已知的问题 类的开发/维护历史、版本 注释出采用的不变量 并行策略
31、编译单元 每一个类/类内定义的接口,含简单的说明 文件名和/或标识信息 修改/维护记录 版权信息 获取成员函数若可能,说明为什么使用滞后初始化 接口 目的 它应如何被使用以及如何不被使用 局部变量用处/目的 成员函数注释 成员函数做什么以及它为什么做这个 哪些参数必须传递给一个成员函数 成员函数返回什么 已知的问题 任何由某个成员函数抛出的异常 可见性决策 成员函数是如何改变对象的 包含任何修改代码的历史 如何在适当情况下调用成员函数的例子 适用的前提条件和 后置条件 成员函数内部注释控制结构 广东技术股份有限公司 29 代码做了些什么以及为什么这样做 局部变量 难或复杂的代码或代码 处理顺序
32、 包 包的基本原理 包中的类 功能和用途 包的开发/修改/维护/版本信息 版权信息 4.3命名 4.3.1基本原则 1使用可以准确说明变量/字段/类的完整的英文描述符。例如,采用类似 firstName, grandTotal 或 CorporateCustomer 这样的名字。 2采用该领域的术语。如果用户称他们的“客户” (clients) 为“顾客” (customers), 那么就采用术语 Customer 来命名这个类,而不用 Client。 3采用大小写混合,提高名字的可读性。一般应该采用小写字母,但是类和接口的名字的 首字母,以及任何中间单词的首字母应该大写。 4尽量少用缩写。
33、5避免使用长名字(最好不超过 15 个字母) 。 6避免使用相似或者仅在大小写上有区别的名字。 4.3.2字段 1常量:采用完整的英文大写单词,在词与词之间用下划线连接。 2变量:对不易清楚识别出该变量类型的变量应使用类型缩写作其前缀,如字符串使用 strXXX,boolean 使用 isXXX,hasXXX 等等。除第一各个单词外其余单词首字母大写。 3命名时应使用复数来表示它们代表多值。如:orderItems。 4组件/部件:应采用完整的英文描述符命名组件(接口部件) ,使用匈牙利命名法则。如: btnOK,lblName。 5集合:一个集合,例如数组和矢量,应采用复数命名来表示队列中存
34、放的对象类型。命 名应采用完整的英文描述符,名字中所有非开头的单词的第一个字母应大写,适当使用 广东技术股份有限公司 30 集合缩写前缀。如:orderItems,aryUsers。 4.3.3类、接口 应当所有单词首字母大写。 应当能间接而确切地反应该类、 接口的含义。 一般采用名词。 4.3.4方法 方法的命名应采用完整的英文描述符, 大小写混合使用: 所有中间单词的第一个字母大 写。方法名称的第一个单词常常采用一个有强烈动作色彩的动词。 取值类使用 get 前缀,设值类使用 set 前缀,判断类使用 is(has)前缀。 例: getName() setSarry() isLogin()
35、 方法参数建议顺序:(被操作者,操作内容,操作标志,其他) 例:public void replace(String sourceStr,String oldStr,String nHWStr) 4.3.5文件、包 文件名当与其类严格相同,包名一律小写,多单词以下划线连接。 基本包:org.skyinn,所有包、文件都属于此包。 4.3.6命名约定列表 操作项命名约定示例 参数使用传递值/对象的完整的英文描述符。userID 字段/属性 字段采用完整的英文描述,第一个字母小写,任何中间 单词的首字母大写。 firstName 布尔型的获取 成员函数 所有的布尔型获取函数必须用单词 is(has
36、)做前缀。 isString(),hasMone y() 类采用完整的英文描述符,所有单词的第一个字母大写。Customer 编译单元文件 使用类或接口的名字,或者如果文件中除了主类之外还 有多个类时, 加上前缀 java 来说明它是一个源码文件。 Customer.java 部件/组件 使用完整的英文描述来说明组件的用途,将组件类型使 用匈牙利命名法则作其前缀 btnOK,cboTypeList 构造函数使用类名Customer() 析构函数 Java 没有析构函数,但一个对象在垃圾收集时,调用成 员函数 finalize() 。 finalize() 广东技术股份有限公司 31 异常通常采
37、用字母 e 表示异常。e 静态常量字段 (常量) 全部采用大写字母,单词之间用下划线分隔。采用静态 常量获取成员函数。 DEFAULT_NAME 获取成员函数被访问字段名的前面加上前缀 get。getUserName() 接口 采用完整的英文描述符说明接口封装,所有单词的第一 个字母大写。使用 I 前缀,其后使用 able,. ible 或者 er 等后缀,但这不是必需的。 IRunnable IPrompter 局部变量 采用完整的英文描述符,第一个字母小写,但不要隐藏 已有字段。例如,如果有一个字段叫 firstName,不要 让一个局部变量叫 firstName。 strName,tot
38、alMon ey 循环计数器通常采用字母 i,j,k 或者 counter,indexi,j,k,count,index 包 采用完整的英文描述符,所有单词都小写,多个单词以 下划线相连。所有包都属于 org.skyinn org.skyinn.quasar org.skyinn.skyhom e 成员函数 采用完整的英文描述说明成员函数功能,第一个单词尽 可能采用一个生动的动词,除第一个单词外,每个单词 第一个字母小写。 openFile() addUser() 设置成员函数被访问字段名的前面加上前缀 set。 setName() setPower() 4.4声明 4.4.1包 1packa
39、ge 行要在 import 行之前,import 中标准的包名要在本地的包名之前,而且 按照字母顺序排列。 如果 import 行中包含了同一个包中的不同子目录, 则应该用 * 来 处理。 2在导入包时当完全限制代码所使用的类的名字,而少用通配符的方式,如: import java.awt.Color; import java.awt.Button; 3在包名下空一行再写 import. package com.EP.dev1.personinformationsys.sysmanage.log; import java.io.*; import java.sql.Connection; 广东
40、技术股份有限公司 32 import com.ep.dev1.personinformationsys.dbsys.dbtools.*; 4.4.2类、接口 开括号与闭括号各自独立成行,并对齐,并使用/end .标识。 声明顺序(建议) : 私有字段 公有/受保护字段 构造函数 finalize() 公共成员函数 被保护成员函数 私有成员函数 尽力使类的公共和保护接口最小化。 在开始编写类的代码之前应先定义该类的公共接口。 4.4.3字段 公共和保护的可见性应当尽量避免, 所有的字段都应置为私有, 由获取和设置成员函数 (存取函数)访问。 不允许“隐藏”字段,即给局部变量、参数或者字段所取的名
41、字,与另一个更大范围内 定义的变量、 参数或者字段的名字相同 (或相似) 。 例如, 如果把一个字段叫做 firstName , 就不要再生成一个局部变量或者参数叫做 firstName,或者任何类似的名字,如 firstNames 或 fistName。 一行代码只声明一个变量,仅将变量用于一件事。 4.4.4方法 良好的程序设计应该尽可能减小类与类之间耦合,所遵循的经验法则是: 尽量限制成员 函数的可见性。如果成员函数没必要公有 (public),就定义为保护 (protected);没必要保 护 (protected),就定义为私有 (private)。 4.5表达式和语句 1各功能块间
42、以空行相隔。 广东技术股份有限公司 33 2判断中如有常量,则应将常量置与判断式的右侧。如: 3if ( true = isAdmin(). 4尽量不使用三目条件判断。 5循环计数器如 i,j 等需在循环体前声明, 避免使用如 for( int i = 0; i = N; i+).等语句。 6循环跳转条件当注明清楚。 4.6错误处理和异常事件 通常的思想是只对错误采用异常处理:逻辑和编程错误,设置错误,被破坏的数据,资 源耗尽,等等。通常的法则是系统在正常状态下以及无重载和硬件失效状态下,不应 产生任何异常。 最小化从一个给定的抽象类中导出的异常的个数。 对于经常发生的可预计事件不要采用异常。 不使用异常实现控制结构。 确保状态码有一个正确值。 在本地进行安全性检查,而不是让用户去做。 4.7可移植性 为保证系统的跨平台性,不得使用任何某平台专有/用的资源、类库等。在代码级也必 须同时保证系统的可移植性。必须在 UNIX、WINDOWS 下都进行测试,并且保证处理结 果的一致性。 4.8复用 任何可复用的代码、资源等必须打成可重用包。 任何从外部源所购买/复用的 Java 类库或者包应是 100% 纯粹的 Java 语言, 以确保 所用的部件能在所有平台上工作。