JAVA开发编码规范1.2(3)

2019-08-31 00:26

江苏亿科达科技发展有限公司

4.4 字段

4.4.1 常量

采用完整的英文大写单词,在词与词之间用下划线连接,如:DEFAULT_VALUE

4.4.2 变量和参数

对不易清楚识别出该变量类型的变量应使用类型缩写作其前缀,如字符串使用strXXX,boolean 使用isXXX,hasXXX 等等。除第一各个单词外其余单词首字母大写。对私有实例变量可使用下划线“_”前缀,但在其存取方法中则应该将其前缀去掉。局部变量及输入参数不要与类成员变量同名(get/set 方法与构造函数除外)。

4.4.3 组件/部件

应采用完整的英文描述符命名组件(接口部件),遵循匈牙利命名法则页面部件名建议命名为:btnOK、lblName 或okBtn、nameLbl。(II)

4.4.4 集合

一个集合,例如数组和矢量,应采用复数命名来表示队列中存放的对象类型。命名应采用完整的英文描述符,名字中所有非开头的单词的第一个字母应大写,适当使用集合缩写前缀。如:__

11/18

江苏亿科达科技发展有限公司

5 编程规范(Programming Conventions)

声明的基本原则是遵守Java 语言规范,并遵从习惯用法。。

5.1 基本规范

? ? ? ?

当面对不可知的调用者时,方法需要对输入参数进行校验,如不符合抛出IllegalArgumentException,建议使用Spring 的Assert 系列函数。

隐藏工具类的构造器,确保只有static 方法和变量的类不能被构造实例。 变量,参数和返回值定义尽量基于接口而不是具体实现类。如:

代码中不能使用System.out.println(),e.printStackTrace(),必须使用logger 打印信息。

5.2 类与接口

5.2.1 基本原则 ?

类的划分粒度,不可太大,造成过于庞大的单个类,也不可太细,从而使类的继承太深。一般而言,一个类只做一件事;另一个原则是根据每个类的职责进行划分,比如用User 来存放用户信息,而用UserDAO 来对用户信息进行数据访问操作(比如存取数据库),? ? ? ?

用UserBroker 来封装用户信息的业务操作等等。 多使用设计模式,随时重构。

多个类中使用相同方法时将其方法提到一个接口中或使用抽象类,尽量提高重用度。 将不希望再被继承的类声明成final,例如某些实用类,但不要滥用final,否则会对系统的可扩展性造成影响。

将不希望被实例化的类的缺省构造方法声明成private。

5.2.2 抽象类与接口

一般而言:接口定义行为,而抽象类定义属性和公有行为,注意两者间的取舍,在设计中,可由接口定义公用的行为,由一个抽象类来实现其部分或全部方法,以给子类提供统一的行为定义,可参考Java 集合等实现。

多使用接口,尽量做到面向接口的设计,以提高系统的可扩展性。

5.2.3 继承与组合

尽量使用组合来代替继承,一则可以使类的层次不至于过深,而且会使类与类,包与包之间的耦合度更小,更具可扩展性。

5.2.4 构造函数和静态工厂方法

当需要使用多个构造函数创建类时,建议使用静态工厂方法替代这些构造方法。

12/18

江苏亿科达科技发展有限公司

5.3 方法

5.3.1 基本原则

? 一个方法只完成一项功能,在定义系统的公用接口方法外的方法应尽可能的缩 小其可见性。

? 避免用一个类是实例去访问其静态变量和方法。 ? 避免在一个较长的方法里提供多个出口。

5.3.2 参数和返回值

? 避免过多的参数列表,尽量控制在5 个以内,若需要传递多个参数时,当使 用一个容纳这些参数的对象进行传递,以提高程序的可读性和可扩展性。

? 参数类型和返回值尽量接口化,以屏蔽具体的实现细节,提高系统的可扩展性。

5.4 错误与异常

5.4.1 基本原则

? 通常的思想是只对错误采用异常处理:逻辑和编程错误,设置错误,被破坏的 数据,资源耗尽,等等。

? 通常的法则是系统在正常状态下以及无重载和硬件失效状态下,不应产生任何 异常。

? 最小化从一个给定的抽象类中导出的异常的个数。 ? 对于经常发生的可预计事件不要采用异常。 ? 不要使用异常实现控制结构。

? 确保状态码有一个正确值。

? 在本地进行安全性检查,而不是让用户去做。

? 若有finally 子句,则不要在try 块中直接返回,亦不要在finally 中直接返 回。

5.4.2 已检查异常与运行时异常

? 已检查异常必须捕捉并做相应处理,不能将已检查异常抛到系统之外去处理。 ? 对可预见的运行时异常当进行捕捉并处理,比如空指针等。通常,对空指针的 判断不是使用捕捉NullPointException 的方式,而是在调用该对象之前使用判 断语句进行直接判断。

? 建议使用运行时异常(RuntimeException)代替已检查异常(CheckedException)。

5.4.3 异常处理

? 重新抛出的异常必须保留原来的异常,即throw new NewException(\

13/18

江苏亿科达科技发展有限公司

e); 而不能写成throw new NewException(\。

? 在所有异常被捕获且没有重新抛出的地方必须写日志,避免异常的湮没。 ? 如果属于正常异常的空异常处理块必须注释说明原因,否则不允许空的catch 块。

? 框架尽量捕获低级异常,并封装成高级异常重新抛出,隐藏低级异常的细节。

? 多个异常应分别捕捉并处理,避免使用一个单一的catch 来处理。

5.5 JDK5.0 及后续版本

? 重载方法必须使用@Override,可避免父类方法改变时导致重载函数失效 ? 不关心的warning 信息用@SuppressWarnings(\,

@SuppressWarnings(\注释掉。

5.6 性能与安全

5.6.1 String 与StringBugffer

不要使用如下String 初始化方法: String str = new String(“abcdef”);

这将产生两个对象,应当直接赋值:

String str = “abcdef”;

在处理可变String 的时候要尽量使用StringBuffer 类,StringBuffer 类是构成String 类的基础。String 类将StringBuffer 类封装了起来,(以花费更多时间为代价)为开发人员提供了一个安全的接口。当我们在构造字符串的时候,我们应该用StringBuffer 来实现大部分的工作,当工作完成后将StringBuffer 对象再转换为需要的String 对象。比如:如果有一个字符串必须不断地在其后添加许多字符来完成构造,那么我们应该使用StringBuffer 对象和她的append() 方法。如果我们用String 对象代替StringBuffer 对象的话,将会花费许多不必要的创建和释放对象的CPU 时间。

5.6.2 集合

避免使用Vector 和HashTable 等旧的集合实现,这些实现的存在仅是为了与旧的系统兼容,而且由于这些实现是同步的,故而在大量操作时会带来不必要的性能损失。在新的系统设计中不当出现这些实现,使用ArrayList 代替Vector,使用HashMap 代替HashTable。 若却是需要使用同步集合类,当使用如下方式获得同步集合实例:

Map map = Collections.synchronizedMap(new HashMap());

由于数组、ArrayList 与Vector 之间的性能差异巨大(具体参见《Java fitball》),故在能使用数组时不要使用ArrayList,尽量避免使用Vector。

5.6.3 对象

14/18

江苏亿科达科技发展有限公司

? 避免在循环中频繁构建和释放对象。 ? 不再使用的对象应及时销毁。 ? 如无必要,不要序列化对象

5.6.4 同步

? 在不需要同步操作时避免使用同步操作类,如能使用ArrayList 时不要使用 Vector。

? 尽量少用同步方法,避免使用太多的synchronized 关键字。

? 尽量将同步最小化,即将同步作用到最需要的地方,避免大块的同步块或方法 等。

5.6.5 final

? 将参数或方法声明成final 可提高程序响应效率,故此:

? 注意绝对不要仅因为性能而将类、方法等声明成final,声明成final 的类、方法一定要? ? ? ?

确信不再被继承或重载!

不需要重新赋值的变量(包括类变量、实例变量、局部变量)声明成final。 所有方法参数声明成final。

私有(private)方法不需要声明成final。 若方法确定不会被继承,则声明成final。

5.6.6 垃圾收集和资源释放

不要过分依赖JVM 的垃圾收集机制,因为你无法预测和知道JVM 在什么时候运行GC。尽可能早的释放资源,不再使用的资源请立即释放。

可能有异常的操作时必须在try 的finally 块中释放资源,如数据库连接、IO 操 作等。

15/18


JAVA开发编码规范1.2(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:嵌入式系统测试方法

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: