JAVA编程规范_第1页
JAVA编程规范_第2页
JAVA编程规范_第3页
JAVA编程规范_第4页
JAVA编程规范_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、文档编号: 版本编号:Java编程规范文件状态: 草案 正式发布 正在修改文档类别:软件开发过程规范文档编号:当前版本:作 者:开发中心完成日期:2006-10-1版 本 历 史版本/状态作者参与者起止日期备注目 录JAVA编程规范1§1.引言5§2.命名规则5§3.Java 文件样式6§3.1.版权信息6§3.2.Package/Imports7§3.3.Class7§4.代码编写格式10§4.1.代码样式10§4.2.文档化10§4.3.缩进11§4.4.页宽11§4.5

2、.注释12§4.5.1.目的12§4.5.2.场景12§4.5.3.要求13§4.6.其他14§4.6.1.一行只写一个语句14§4.6.2.空行使用14§4.6.3.空格使用14§4.6.4. 对15§4.6.5.括号15§4.6.6.语句和表达式的参照格式15§4.7.Jbuilder的格式设置17§5.程序编写规范20§5.1.main()20§5.2.exit()21§5.3.异常21§5.4.垃圾收集21§5.5.C

3、lone21§5.6.final类22§5.7.访问类的成员变量22§6.编程技巧22§6.1.设计类和方法22§6.2.继承的选择23§6.3.作用域23§6.4.“伪功能”24§6.5.不必要的对象构造24§6.6.interfaces和abstract class24§6.7.变量24§6.8.避免使用“魔术数字”25§6.9.byte 数组转换到 characters25§6.10.Utility 类25§6.11.初始化25§6.12.

4、枚举类型25§6.13.Swing26§6.14.性能26§6.15.使用 StringBuffer 对象26§6.16.避免太多的使用 synchronized 关键字27§6.17.换行27§6.18.PrintStream27§6.19.数值计算27§6.20.finalize()28§6.21.对象集合28§6.22.constructor28§6.23.循环28§1. 引言本规范定义一个源码级应用程序的开发规范,它是借助java程序语言,以Eclipse开发环境为例

5、提供的标准化服务。它可供应用开发人员及系统设计人员使用。本规范描述开发人员关心的外部特性及设施,而不是描述为达到这些功能采用的内部结构技术。适用于公司中所有使用java作为程序开发语言进行的产品和项目的应用开发。§2. 命名规则为了让项目中所有的文档具有一致性的,增加可读性,保证产品和项目的可维护性,在命名时用英文为类或方法等赋予表义性强的名字。比如方法名doIt、getIt的可读性很难与calculateSalesTax、retrieveByUserID相比。给正确的命名,可使程序工程的调试和维护工作大大的改观。认真对待方法命名的工作,不要为了减少键入操作量而降低可理解度。除了广为

6、人知通用的和公司专门作了规定的单词以外,不要自行使用缩写,由缩写方法名组成的代码很难理解和维护。Ø Package包(Package)的命名用点号来分隔,全都都是小写名词,即便中间的单词亦是如此。对于域名扩展名称,如com,org,net或者edu等,全部都应小写(这也是Java 1.1和Java 1.2的区别之一)。Ø Class/Interface类/接口(class/interface)名必须由大写字母开头而其他字母都小写用名词组成。例如:ClassName通用的类名(文件)包括:u 抽象类 AbstractClassNameu 实现类 InterfaceNameIm

7、plu 缺省实现类 DefaultInterfaceNameImplu 工具类 ClassNameUtilØ 变量变量一般使用名词,首字母小写,大写中间单词的首字母。例如: fieldName 不要用_或&作为变量名称的第一个字母;单字符的变量名一般只用于生命期非常短暂的变量。i,j,k,m,n一般用于integers;c,d,e一般用于characters;如果变量是集合,则变量名应用复数。Ø Static Final 常量static Final 变量的名字都大写,单词间以_隔开,并且指出完整含义。 MAX_VALUEØ 方法方法(method)名第一

8、个单词一般是动词,首字母小写,大写中间单词的首字母。例如:showMethodName accessors和mutators的命名:如果方法返回一个成员变量的值,方法名一般为get+成员变量名,如若返回的值是bool变量,一般以is作为前缀。如果方法修改一个成员变量的值,方法名一般为:set + 成员变量名。例如若某类有属性String bankAccount,则:String getBankAccount()/正确String getbankAccount()/错误校验方法命名一般以can开始。Ø 参数参数一般使用名词,首字母小写,大写中间单词的首字母。 例如:parameterN

9、ame 使用有意义的参数命名,如果可能的话,使用和要赋值的字段一样的名字,例如:public void setCounter(int size) this.size = size; Ø 数组数组应该总是用这种方式来命名:byte buffer 而不是: byte buffer;§3. Java 文件样式所有的 Java(*.java) 文件都必须遵守如下的样式规则(严格按以下顺序组织各部分)。§3.1. 版权信息版权信息必须在 java 文件的开头,其他不需要出现在 javadoc 的信息也可以包含在这里。比如: /* XMLHelper.java* 版本:1.0

10、.0* 日期:2004-11-15* Copyright ® 2004 YINHAI Software Co. Ltd.* All right reserved.*/§3.2. Package/Importspackage 行要在 import 行之前,import 的包或类先按JDK标准包、JDK扩展包、第三方包、公共包名、本地应用包顺序,再按照字母顺序排列。如果 import 行中包含了同一个包中的不同子目录,则应该用 * 来处理。比如:package .stats; import java.io.*; import java.util.Observable; i

11、mport hotlava.util.Application;这里 java.io.* 使用来代替InputStream and OutputStream 的。 §3.3. ClassØ 每个Java源文件包含一个单一的public class 或interface。 当private class及interface与public class相关联时,可将它们放在同一个源文件中作为private class。 public class应当是文件中的第一个class及interface。Ø 类注释类的注释一般是用来解释类的,比如:/* * 辅助解析XML文件,* a

12、uthor ×××* version ×.×.×*/Ø 类定义接下来是类定义,包含了在不同的行的 extends 和 implements public class CounterSet extends Observable implements Cloneable Ø 类变量public的变量必须有注释生成文档(JavaDoc),proceted、private和package 定义的成员变量如果名字含义明确的话,可以没有注释。例如:/* * 姓名*/ protected String name; 类变量必须按s

13、tatic final变量、static non-final变量、成员变量的顺序声明Ø 构造方法 构造方法应该用递增的方式写(比如:参数多的写在后面)作用域(“public”, “private” 等) 和 任何 “static”, “final” 或“synchronized”及方法和参数写在一行中,如果列宽超过80,参数可以折行。例如:public People(String name, String sex, Date birthday ) this. name = name; this. sex = sex; this. birthday = birthday; Ø

14、 类方法类方法要按照public、protected、private的排序,以下是一个方法的示例: /* * Set the packet counters * (such as when restoring from a database) * param r1 * param r2 * param r3 * param r4 */ protected final void setArray(int r1, int r2, int r3, int r4)throws IllegalArgumentException / / Ensure the arrays are of equal siz

15、e / if (r1.length != r2.length | r1.length != r3.length | r1.length != r4.length)throw new IllegalArgumentException("Arrays must be of the same size"); System.arraycopy(r1, 0, r3, 0, r1.length); System.arraycopy(r2, 0, r4, 0, r1.length); Ø 存取方法它只是简单的用来将类的变量赋值获取值的话,可以简单的写在一行上。 /* * 获取姓

16、名* return 雇员姓名。 */public String getName() return name; /* * 设置姓名* param sex 雇员姓名。 */public void setSex(String sex) this.sex = sex; 其它的方法不要写在一行上 Ø 克隆方法如果这个类是可以被克隆的,那么下一步就是 clone 方法:public Object clone() try People obj = (People)super.clone(); obj. name = name; obj. sex = sex; this. birthday = bi

17、rthday; catch(CloneNotSupportedException e) Ø finalize()public void finalize()Ø toString 方法无论如何,每一个类都应该定义 toString 方法: public String toString() String retval = "CounterSet: " for (int i = 0; i < data.length(); i+) retval += data.bytes.toString(); retval += data.packets.toStrin

18、g(); return retval; Ø main 方法 如果定义了main(String) 方法, 那么它应该写在类的底部。§4. 代码编写格式§4.1. 代码样式 代码应该用 unix 的格式,而不是 windows 的格式(比如:回车变成回车+换行) §4.2. 文档化 必须用 javadoc 来为类生成文档。不仅因为它是标准,这也是被各种 java 编译器都认可的方法。使用author 标记是不被推荐的,因为代码不应该是被个人拥有的。 javadoc是一种文档产生工具,它可以方便的将源文件中的注释转成标准的java文档。 只要在写注释的时候按照

19、一定标准来写就可以了。下表是javadoc支持的一些标签。我们应该在自己的注释中应用javadoc规范。TAG 标签使用对象目的author nameInterfaces,Classes,标识作者一个author 对应一个作者deprecatedInterfaces,Classes,Member Functions表示这个API已经不推荐使用,请使用其他类型代替exception name descriptionMember Functions描述方法会抛出的异常一个标签对应一个异常name应该是异常类的全名param name descriptionMember Functions用来描述参

20、数, 包括它的类型和使用方法return descriptionMember Functions返回值说明, 包括类型, 和代表的意义sinceInterfaces,Classes, Member Functions显示该项目什么时候开始存在的例如 since JDK 1.1see ClassNameClasses,Interfaces,MemberFunctions, Fields建立一个超级连接到指定的class作为参考see ClassName#memberfunctionNameClasses,Interfaces,MemberFunctions, Fields建立一个超级连接到指定的

21、某一个方法中去version textClasses,Interfaces版本号注:todo 标签在JBuilder中有特殊的提示作用,可以考虑在注释中使用。§4.3. 缩进在if语句、else语句、switch语句、case语句、do语句后缩进;已经用行接续符分割的语句的各个行要缩进对从属于行标注的代码进行缩进当你将变量设置为某个值时,所有后续行的缩进位置应与第一行的变量值相同;当你调用一个方法时,后续行缩进到第一个参数的开始处;当你将变量或属性设置为等于表达式的计算结果时,请从后面分割该语句,以确保该表达式尽可能放在同一行上。由于在使用不同的源代码管理工具时Tab字符将因为用户设

22、置的不同而扩展为不同的宽度,缩进应该是每行2个空格。 不要在源文件中保存Tab字符。在UltraEdit中通过先设定 Tab 使用的长度为2个空格,然后用 Format|Tabs to Spaces 菜单将 Tab 转换为空格。在Jbuilder可以将project的properties|formatting中的Block Indent和Tab Size设为2,并且不要选中Use Tab Char。§4.4. 页宽页宽应该设置为80字符。源代码一般不应超过这个宽度, 否则可能导致无法完整显示, 但这一设置也可以灵活调整。当一个表达式在一行中写不下时,按如下规则换行:Ø 逗号

23、“,”后断开Ø 操作符后断开Ø 新行中表达式的起点与前一行左对齐。Ø 如果上法使右边空余太少,可只缩进四个空格开始新行。§4.5. 注释§4.5.1. 目的Ø 文字说明代码的作用(即为什么要编写该代码,而不是如何编写),使代码的阅读者不必在他们的头脑中仿真运行代码的执行方法。Ø 明确指出该代码的编写思路和逻辑方法。 Ø 提示人们注意到代码中的重要转折点。Ø 文档化§4.5.2. 场景Ø 注释类或接口的开发/维护历史、已知的问题、目的、以及它应如何被使用以及不被如何使用等。Ø

24、注释所有的常量。Ø 注释字段(field)/属性(property)。Ø 注释方法的开发/维护历史、已知的问题、做什么以及为什么这样做、必须传递哪些参数、返回结果、抛出的异常、它内部是如何改变对象以及适用的前提条件和后置条件等。Ø 注释方法的参数的作用以及它的任何约束或前提条件。Ø 注释局部变量的用处目的。Ø 注释方法中并行事件、并行策略、可见性决策(每个if语句、switch语句、循环的前面)等控制结构。Ø 技巧性特别高、难或复杂的代码段,一定要加详细的注释,不要让其他开发人员花很长时间来研究一个高技巧但不易理解的程序段。Ø

25、; 如果需要违背好的编程原则,或者使用了某些不正规的方法,遇到这种情况时,需用注释来说明做什么和为什么要这样做。Ø 说明何时可能出错和为什么出错。§4.5.3. 要求Ø 注释遵循的格式l 块注释主要用来描述文件,类,方法,算法等。一般用在文档和方法的前面,也可以放在文档的任何地方。以/*开头,*/结尾。例如:/* 注释*/l 行注释主要用在方法内部,对代码,变量,流程等进行说明。与块注释格式相似,但是整个注释占据一行。例:/* 注释 */l 尾随注释与行注释功能相似,放在代码的同行,但是要与代码之间有足够的空间,便于分清。例:int m=4 ; /* 注释 */如

26、果一个程序块内有多个尾随注释,每个注释的缩进应该保持一致。l 行尾注释与行注释功能相似,放在每行的最后,或者占据一行。以/开头。int m=4 ; / 注释l 文档注释与块注释相似,但是可以被javadoc处理,生成HTML文件。以/*开头,*/结尾。文档注释不能放在方法或程序块内。例:/* 注释*/Ø 注释应语言简炼、易懂而又准确,所采用的语种首选是中文,如有输入困难、编译环境限制或特殊需求也可采用英文。Ø 使用完整的语句。虽然不必将注释分成段落(最好也不要分成段落),但应尽量将注释写成完整的句子。Ø 注释一定出现在要注释的程序段前,不要在某段程序后书写对这段程

27、序的注释,先看到注释对程序的理解会有一定帮助。如果有可能,在注释行与上面代码间加一空行。Ø 在执行统一任务的各个语句组之间插入一个空行或注释。好的代码应由按逻辑顺序排列的进程或相关语句组构成。Ø 为了从视觉上突出注释与它的代码之间的关系,请将注释缩进,使之与代码处于同一个层次上。Ø 每个方法都应有一个注释标头。方法的注释标头可包含多个文字项,比如输入参数、返回值。Ø 使用多个行尾注释时(比如用于方法顶部的多个变量说明),应使它们互相对齐。这可使它们稍容易阅读一些。§4.6. 其他§4.6.1. 一行只写一个语句不论是变量声明,还是语句

28、都不要在一行上书写多个。§4.6.2. 空行使用下列语句后面都需要一行空行:Ø 包声明Ø Import(s)Ø 成员变量声明Ø 方法结束括号方法体内,变量声明后,代码开始前需要两个空行。§4.6.3. 空格使用操作符必须用空格a = b + c;变量列表必须用空格a = myFunction(param1, param2, param3);§4.6.4. 对 中的语句应该单独作为一行,例如: 下面的第1行是错误的, 第2行是正确的if (i>0) i + ; / 错误, 和 在同一行 if (i>0) i + ;

29、 / 正确, 单独作为一行 语句永远单独作为一行, 语句应该缩进到与其相对应的 那一行相对齐的位置。 §4.6.5. 括号左括号和后一个字符之间不应该出现空格, 同样, 右括号和前一个字符之间也不应该出现空格。下面的例子说明括号和空格的错误及正确使用: CallProc( AParameter ); / 错误 CallProc(AParameter); / 正确 不要在语句中使用无意义的括号。括号只应该为达到某种目的而出现在源代码中。下面的例子说明错误和正确的用法: if (I) = 42) / 错误 - 括号毫无意义 if (I = 42) | (J = 42) )then / 正

30、确 - 的确需要括号 §4.6.6. 语句和表达式的参照格式Ø if-else,if-elseif语句,任何情况下,都应该有“”,“”,格式如下:if (condition) statements; else if (condition) statements; else statements;Ø for语句格式如下:for (initialization; condition; update) statements;如果语句为空:for (initialization; condition; update) ;Ø while语句格式如下:while (

31、condition) statements;如果语句为空:while (condition);Ø do-while语句格式如下:do statements; while (condition);Ø switch语句,每个switch里都应包含default子语句,格式如下:switch (condition) case ABC: statements; /* falls through */case DEF: statements; break;case XYZ: statements; break;default: statements; break;Ø try

32、-catch语句格式如下:try statements; catch (ExceptionClass e) statements; finally statements;§4.7. Jbuilder的格式设置在使用Jbuilder时请将工程的格式按如下设置:§5. 程序编写规范§5.1. main()对于自己创建的每一个类,都考虑置入一个main(),其中包含了用于测试那个类的代码。为使用一个项目中的类,我们没必要删除测试代码。若进行了任何形式的改动,可方便地返回测试。这些代码也可作为如何使用类的一个示例使用。§5.2. exit() exit 除了在

33、main 中可以被调用外,其他的地方不应该调用。因为这样做不给任何代码机会来截获退出。一个类似后台服务的程序不应该因为某一个库模块决定了要退出就退出。 §5.3. 异常 申明的错误应该抛出一个RuntimeException或者派生的异常。 顶层的main()函数应该截获所有的异常,并且打印(或者记录在日志中)在屏幕上。 §5.4. 垃圾收集 JAVA使用成熟的后台垃圾收集技术来代替引用计数。但是这样会导致一个问题:比如一个perl的程序员可能这么写: FileOutputStream fos = new FileOutputStream(projectFile); pro

34、ject.save(fos, "IDE Project File"); 而非引用计数的程序语言,比如JAVA,是不能自动完成某些资源的清除工作的。必须在使用完对象的实例以后进行清除工作,需要象下面一样写: FileOutputStream fos = new FileOutputStream(projectFile); project.save(fos, "IDE Project File"); fos.close(); /显示关闭在一个特定的作用域内,若一个对象必须清除(非由垃圾收集机制处理),考虑到异常情况请采用下述方法:初始化对象;若成功,则立即进

35、入一个含有finally从句的try块,在finally中开始清除工作。§5.5. Clone 在实现Cloneable接口时下面是一种有用的方法: public Object clone() try ThisClass obj = (ThisClass)super.clone(); obj.field1 = (int)field1.clone(); obj.field2 = field2; return obj; catch(CloneNotSupportedException e) §5.6. final类绝对不要因为性能的原因将类定义为 final 的(除非程序的框架

36、要求)如果一个类还没有准备好被继承,最好在类文档中注明,而不要将她定义为 final 的。这是因为没有人可以保证会不会由于什么原因需要继承她。 §5.7. 访问类的成员变量大部分的类成员变量应该定义为 private 的来防止继承类使用他们。§5.8. JAVA中与数据库的数据类型对照数据库型特性说明JAVA型VARCHAR2VARCHARCHARNUMBERintLength > 18NUMBERintLength <= 18 & intScale = 0 & intLength < 10NUMBERintLength <= 18

37、& intScale = 0 & intLength >= 10NUMBERintScale > 0DATEDATETIMEBLOBIMAGEbyte其它§6. 编程技巧§6.1. 设计类和方法方法的重要性往往比类的重要性更容易理解,方法是指执行一个统一函数的一段代码。类常被错误的视为是一个仅仅用于存放方法的容器。有些开发人员甚至把这种思路作了进一步的发挥,将他们的所有方法放入单个类之中。类应该用来将相关的方法组织在一起,当类包含一组紧密关联的方法时,该类可以说具有强大的内聚力。当类包含许多互不相关的方法时,该类便具有较弱的内聚力。应该努力创建内

38、聚力比较强的类。其次类要尽可能短小精悍,而且只解决一个特定的问题。下面是对类设计的一些建议: Ø 一个复杂的开关语句考虑采用“多态”机制 。Ø 如果数量众多的方法涉及到类型差别极大的操作考虑用几个类来分别实现 。Ø 如果许多成员变量在特征上有很大的差别考虑使用几个类。Ø 要限制一个类中代码的长度。可以把较大的类方法抽取出来作为单独的类来实现,对于类中易变的部分也应该作相应的分离操作,这样对于程序的可读性和可维护性都是很有好处的。Ø 任何时候只要发现类与类之间结合得非常紧密,就需要考虑是否采用内部类,从而改善编码及维护工作Ø 大多数工程

39、都包含许多并不十分适合与其他方法组合在一起的方法。在这种情况下,可以为这些不合群的方法创建一个综合性收容类。Ø 尽量避免使用类变量。Ø 每个方法都应执行一项特定的任务,它应出色的完成这项任务,要避免创建执行许多不同任务的方法。Ø 创建方法时,方法应依靠参数而不应依靠全局变量,要设法将每个方法视为一个黑箱,其他部分不应要求了解该方法的内部工作情况,该方法也不应要求了解它外面的情况。Ø 应将方法设计成简要的、功能性单元,用它描述和实现一个不连续的类接口部分。理想情况下,方法应简明扼要。若长度很大,可考虑通过某种方式将其分割成较短的几个方法。这样做也便于类内代

40、码的重复使用(有些时候,方法必须非常大,但它们仍应只做同样的一件事情)。 §6.2. 继承的选择在现成类的基础上创建新类时,请首先选择“新建”。只有自己的设计要求必须继承时,才应考虑这方面的问题。若在本来允许新建的场合使用了继承,则整个设计会变得没有必要地复杂。 §6.3. 作用域始终都应显式地定义作用域,而且让一切东西都尽可能地“私有”-private。可使库的某一部分非“公共化”(一个方法、类或者一个字段等等),就永远不能把它拿出。若强行拿出,就可能破坏其他人现有的代码,使他们不得不重新编写和设计。若只公布自己必须公布的,就可放心大胆地改变其他任何东西。在多线程环境中,

41、隐私是特别重要的一个因素,只有private字段才能在非同步使用的情况下受到保护。§6.4. “伪功能”用合理的设计方案消除“伪功能”。也就是说,比如只需要创建类的一个对象,就不要提前限制自己的应用程序,并加上一条“只生成其中一个”注释。请考虑将其封装成一个“单例”的形式。若在主程序里有大量散乱的代码,用于创建自己的对象,请考虑采纳一种创造性的方案,将些代码封装起来。 §6.5. 不必要的对象构造不要在循环中构造和释放对象 。§6.6. interfaces和abstract class尽量使用interfaces,少使用abstract class。若已知某样东

42、西准备成为一个基础类,那么第一个选择应是将其变成一个interface(接口)。只有在不得不使用方法定义或者成员变量的时候,才需要将其变成一个abstract(抽象)类。接口主要描述了客户希望做什么事情,而一个类则致力于(或允许)具体的实现细节。 §6.7. 变量Ø 用于多个目的的变量称为无焦点(多焦点)的变量。无焦点变量所代表的意义与程序的执行流程有关,当程序处于不同位置时,它所表示的意义是不固定的,这样就给程序的可读性和可维护性带来了麻烦。Ø 最好在声明局部变量的地方即做变量的初始化。(唯一的例外是:如果初始值是先由其他计算得出的的时候,不在声明的地方做变量初

43、始化)Ø 在同一个inner block中不要声明相同的变量名称Ø 在一个statement中避免将多个变量赋同一个值§6.8. 避免使用“魔术数字”这些数字很难与代码很好地配合。如以后需要修改它,无疑会成为一场噩梦,因为根本不知道“100”到底是指“数组大小”还是其他全然不同的东西。所以,应创建一个常数,并使用具有说服力的描述性名称,并在整个程序中都采用常数标识符。这样可使程序更易理解、更易维护。 §6.9. byte 数组转换到 characters 为了将 byte 数组转换到 characters,你可以这么做: "Hello worl

44、d!".getBytes(); §6.10. Utility 类 Utility 类(仅仅提供方法的类)应该被申明为抽象的来防止被继承或被初始化。 §6.11. 初始化下面的代码是一种很好的初始化数组的方法: objectArguments = new Object arguments ; §6.12. 枚举类型 JAVA 对枚举的支持不好,但是下面的代码是一种很有用的模板: public class Colour public static final Colour BLACK = new Colour(0, 0, 0); public static

45、final Colour RED = new Colour(0xFF, 0, 0); public static final Colour GREEN = new Colour(0, 0xFF, 0); public static final Colour BLUE = new Colour(0, 0, 0xFF); public static final Colour WHITE = new Colour(0xFF, 0xFF, 0xFF); 这种技术实现了RED, GREEN, BLUE 等可以象其他语言的枚举类型一样使用的常量。 他们可以用 =操作符来比较。但是这样使用有一个缺陷:如果一

46、个用户用这样的方法来创建颜色 BLACK new Colour(0,0,0) 那么这就是另外一个对象,=操作符就会产生错误,她的equal() 方法仍然有效。我们可以将它的构造方法作用域限定为private来杜绝此情况。§6.13. Swing Ø 避免使用 AWT 组件混合使用 AWT 和 Swing 组件 如果要将 AWT 组件和 Swing 组件混合起来使用的话,请小心使用。实际上,尽量不要将他们混合起来使用。 Ø 滚动的 AWT 组件 AWT 组件绝对不要用 JscrollPane 类来实现滚动。滚动 AWT 组件的时候一定要用 AWT ScrollPan

47、e 组件来实现。 Ø 避免在 InternalFrame 组件中使用 AWT 组件 尽量不要这么做,要不然会出现不可预料的后果。 Ø Z-Order 问题 AWT 组件总是显示在 Swing 组件之上。当使用包含 AWT 组件的 POP-UP 菜单的时候要小心,尽量不要这样使用。 §6.14. 性能在写代码的时候,从头至尾都应该考虑性能问题。这不是说时间都应该浪费在优化代码上,而是我们时刻应该提醒自己要注意代码的效率。比如:如果没有时间来实现一个高效的算法,那么我们应该在文档中记录下来,以便在以后有空的时候再来实现她。不是所有的人都同意在写代码的时候应该优化性能这个观点的,他们认为性能优化的问题应该在项目的后期再去考虑,也就是在程序的轮廓已经实现了以后。§6.15. 使用 StringBuffer 对象 在处理 String 的时候要尽量使用 StringBuffer 类,StringBuffer 类是构成 String 类的基础。String 类将 StringBuffer 类封装了起来,(以花费更多时间为代价)为开发人员提供了一个安全的接口。当我们在构造字符串的时候,我们应该用 StringBuffer 来实现大部分的工作,当工作完成后将 StringBuffer 对象再转换为需要的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论