经典的JAVA编程规范

                                         Java 语言编程规范

1.1    概述 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>

1.1.1                                                                                                                                                标准

1.      简洁统一的缩进风格。尽管编译人员并不注意这一点,但这对于您编写的代码的未来读者来说尤其重要。本文将详细介绍缩进。

2.      连续缩进/换行的多行代码

3.      禁用差别不大(只有一个或少数几个字母不同)的名称。
例如:
hiTherehiThre

4.      在名称中禁用下划线字符('_'),类常量除外(见《类常量》一节)。

5.      使用完整的单词,避免使用缩略语,除非它们是大家非常熟悉的缩略语。

6.      如必须使用缩略语,则把它们作为单词使用。
例如:

tempVar 代替 temporaryVariableAmEx 代替 AMEX

7.      代码片断应符合如下标准,起始括号与其相对应的代码的同一行,代码在下一行缩进。结束括号应在与开始程序模块的最初代码的同一缩进位置。通过这一方式来标准化使用括号,您可以很容易地找到闭括号相对应的代码。

例如:
header {
   statement 1;
   statement 2;
}

例如:
try { 
   statement 1;
   statement 2;
}

例如:
for (int i=0; i < 10; i++) {
   statement 1;
   statement 2;
}

8.      复合语句应在前一语句的闭大括号的同一行开始。

例如:
if (this == that) {
   statement 1;
   statement 2;
} else {
   statement 3;
}

例如:
try {
   statement 1;
   statement 2;
} catch(Exception e) {
   statement 3;
}

9.      当您需要持续处理向量( Vector ) 中的元素时,使用以下代码以提高运行效率:

例如:
for (int i=0; i < vector.size(); i++) {
           // do something to vector.elementAt(i)
}

or

for (int i=vector.size()-1; i >= 0; i--) { // slightly more efficient
   // do something to vector.elementAt(i)
}

而不要用 :

Enumeration e = vector.elements();
while (e.hasMoreElements()) {
   // do something to e.nextElement()
}

10.   在方法的注释中记录作为异常处理的被忽略的情况 [YN1]  

例如:
// Something similar to the following would be in the
// method’s javadoc
// comment:
/**
   This method does something.  If such-and-such occurs, it
   is ignored.
 */
try {
   obj.doSomething;
} catch (Exception ignored) {}

11.   确保总有一个(catch)用于处理所有未捕获的异常。

1.1.2                                                                                                                                                指南

1.      保持代码的行长,以与编辑器的水平方向相符(大约75个字符)。

2.      当对基本数据类型(整型、长整型等)进行比较时,使用 ==;对对象数据类型 (字符串、整型、策略等)进行 比较 时,使用 .equals(object) 。与标准相比这仅是提醒而以 [YN2]   ,因为 ==用于 比较实际对象的引用信息,而 .equals(Object)用于校验两个对象是 “相等的”。如果您不想 , 或者如果不适用于 重载 equals(object)方法,则实现一个.isEqualTo(object)方法。

3.      当校验布尔型值时,不要采用如下方式
if (booleanValue == true) or
if (booleanValue == false)
建议使用
if (booleanValue) or
if (!booleanValue)  // For false condition

4.      避免在ifwhile 条件句中使用(“=”)(不要编码为: if (x = 0){} )。原因是 x将一直为0,条件将一直为

1.1.2.1       事件和异常―何时使用

事件- 用于“通知”全体用户(注册了收听的所有人)有事情发生。例如:库存达到最低值,策略已经改变。

异常- 当遇到“异常处理”时抛出(Throw)异常。例如:打开/读/写文件时出错,COBOL程序返回bad (非-0)返回代码,遇到无效指针等。

1.      当抛出异常时,如果抛出少量的异常(3种或低于3种),抛出和捕获(Catch)实际被抛出的异常。如果异常超过3种,设置ProjectException以显示可能要抛出的子类数。这将有助于更清楚地编写代码和文件。不同的捕获程序模块可以用于捕获各个异常。

 

例如:
someMethod()需要抛出3种以上的异常时public void someMethod()抛出ProjectException。

例如
public void anotherMethod() {
   try {
      this.someMethod()
   } catch(SpecificException1 exception) {
      // Do something
   } catch(SpecificException2 exception) {
      // Do something else
   } catch(ProjectException exception) {
      // Default case for handling other unexpected exceptions
   }
}

1.2   

1.2.1                                                                                                                                                标准

·         一般

1.      当创建包时确保它们使用一目了然的分级体系来进行管理。

 

例如,如果一个包的类引用第二个包的类,那么第二个包的类不应引用第一个包的类。(如果它们互相引用,它可能意味着任何一个包都不能单独使用。所有类最好在一个包中)。

 

1.      包将使用以下前缀,其中xxxxx是公司名或项目名的缩略语:com.xxxxx

2.      包名全部字母为小写

例如:
com.xxxxx.business
o bjects

1.      包的版本名应以这一包主要开发用于的项目阶段开始。

例如:

1阶段包版本:1.*

2阶段包版本: 2.*

2.      版本名中,包版本应跟在项目阶段编号之后。

3.      包的最后版本的版本名应在版本名尾包括“(FINAL)”。

1.2.2                                                                                                                                                指南

1.      为相关功能的各个单独项目或组创建新Java包。根据Java 包标准来创建和使用目录。应记录每个包的目的和有效范围。

2.      每个包中大约包括10 – 20个类。

 


1.3   

 

类可以用多种方式来声明。

如果未明确定义类的访问权限时,Friendly 为缺省访问权限。这意味着尽管类可以在同一包中的其它类访问,但不能被当前包外的其它类访问。人们常犯的一个错误是忘记声明类为 public,因此,如果您想要使用这一机制来限制类的有效使用范围,确保对其进行了描述。

正如它们名字的含义,所有对象都可以访问Public 类。这意味着它们可以被任何对象使用或继承,与包无关。

Final 类不能有任何子类。这一最终类修饰符的使用可能有些疑问,因为面向对象意味着能够继承类和它们的行为。但是,我们手边几乎没有可以继承类和行为的实例。例如,当写网络访问类时,您可能希望限制我们只能用一种方式来接入我们的网络,那么您可以创建final 类。

Abstract 允许我们定义类中至少有一种方法是抽象的。这迫使所有这一个类的子类都定义和实现抽象的方法。

1.3.1                                                                                                                                                标准

除非有非常明显的理由,否则要求提供构造函数(constructor)。这一构造函数可以有效调用父类构造函数,但子类仍需要提供该函数。务必在类的注释中说明不包括缺省构造函数的原因。

 

·        命名 标准

1.      所有类名都必须以大写字母开始,必须拼写出整个单词而且附加词的第一个字母必须为大写字母。

例如:
CapitalizedWithInternalWordsAlsoCapitalized, Customer

2.      不要为类添加前缀来标识类(除非某类名已存在)。 包名保证不要使用类名。

3.      特定类型的类后缀添加应适当。

例如:

对于每个业务对象来说(如Customer),可能有其它相关的对象-

·          服务器 上的Home对象 - 如CustomerHome

·          访问相 应服务器对象的客户stub的 对象- 如CustomerHomeStub

·          客户机 和服务器对象共享的接口 - 如CustomerHomeInterface

·          客户窗口界面 包含 代表业务对象的 视图- 如CustomerDetailsView

·          管理业务 流程客户控制器 - 如CreateCustomerManager

1.      使用javadoc注释来介绍每个类。当记录类的API时确保使用 /**  …  */ 标准。Javadoc包使用这一注释方法从文件夹中提取文件以创建HTML文件,从而记录我们的API。 适当地包括关于改进说明和样本使用的提示或免责声明。

类头的最小文件要求是:

·          类名

·          类的目的/说明

·          类创建者

·          创建日期

·          IBM所有权级别 (第I、II或III类)

·          修改信息:

·          修改的人员

·          修改日期

·          修改内容

 

例如:

/**  ClassName

Class description.

Author:  <Author’s name>

Date:  <Class creation date>

Ownership:  <Ownership Level>

 

Updates

       Name: <Author’s name>

       Date: <Class update date>

       Reason: <some descriptive reason>

*/

2.      注释应总是在类的引入语句之后。如果您在引入语句之前加了注释,当生成javadoc 时IBM VisualAge Java将忽略这些注释。

1.      类的版本命名应以阶段编号开始。

例如:

1阶段类版本: 1.*

2阶段类版本:2.*

2.      版本名中,类的版本应跟在阶段编号之后。

3.      类的上线版本的版本名应在结尾包括 “(FINAL)”。

1.3.2                                                                                                                                                指南

·        import

1.      仅在您从同一包中引入5种类型以上的文件时使用import的*格式,以便迅速编译。

2.      您可以在自己的代码中import所有类型文件。除非存在命名空间冲突,否则不要明确使用完整命名的文件。

3.      验证所有声明的import实际上都是为了帮助最大限度地减少编译时间。

4.      包和类名按字母顺序保存import语句以提高可读性。

1.      抽象类应至少有一个具体方法。如果抽象类只有抽象方法,实际上它应是一个接口。这是因为父类应用于共享一般行为,但接口支持执行所有行为。

内部类是在其它类中定义的类。只有外部类可以看到这些类。

注:写程序时,一些开发环境不能很好地处理内部类。

1.      内部类可用于稳藏“helper”类(如窗口的 Even

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值