源代码编写规范

上传人:小** 文档编号:63925176 上传时间:2022-03-20 格式:DOC 页数:33 大小:359.50KB
收藏 版权申诉 举报 下载
源代码编写规范_第1页
第1页 / 共33页
源代码编写规范_第2页
第2页 / 共33页
源代码编写规范_第3页
第3页 / 共33页
资源描述:

《源代码编写规范》由会员分享,可在线阅读,更多相关《源代码编写规范(33页珍藏版)》请在装配图网上搜索。

1、源代码编写规范(V1.0)二0一0年一月目录概述 3规范内容 : 43.1 源代码标注规范(forC+ ) : 43.1.1 缩写规则 43.1.2 命名规则 43.1.3 语句构造规则 83.1.4 书写格式规则 93.1.5 注释规则 93.2 源代码标注规范(forASP) 123.2.1 编码约定概述 123.2.2 常数命名规则 123.2.3 变量命名规则 123.2.4 变量作用域 133.2.5 变量作用域前缀 133.2.6 描述性变量名和过程名 133.2.7 对象命名规则 133.2.8 代码注释约定 143.2.9 格式化代码 153.3源代码标注规范(forJava

2、) 173.3.1 命名规范 173.3.2 Java文件的样式规则183.3.3 代码编写格式 213.3.4 Swing 253.3.5 调试 253.3.6 性能 25可移植性 26概述一) 编写目的为了健全公司软件源代码的管理,增加源代码的可读性,提高软件开发 效率,特编写些规范。此规范并非源代码编写的一个标准,而是作为一个参 考,以培养开发人员良好的编程习惯。二)范围开发时源代码的命名、注释规范(包括 ASP, C/C+,JAVA )规范内容:3.1 源代码标注规范(for C+ ):3.1.1 缩写规则-缩写后一个单词的长度宜为3-6个字母。-缩写后应能辨认出原意。右:尽量使用公认

3、的缩写习惯,女口: Window缩写为 Win; SmartPoint 缩写为sp。3.1.2 命名规则使用含义鲜明、描述性的英文单词或缩写命名; 命名由字母、数 字和下划线构成,一般情况下不得超过 32个字符;命名建议采 用组合词的方式。3.1.2.1 变量命名规则-一般性规则:由单词(第一个单词或其缩写字母全部小写,以后 单词首字母大写,其余的字母小写)构成名词词组,如如: int nValue;CString strTemp; CListCtrl listUserlnfo;第一个单词(前缀)的缩写格式原则上以匈牙利命名方式为准(参见表一:匈牙利命名 法),并且原则上不建议用下划线作为单词

4、间的连接符:表一:匈牙利命名法前缀类型描述实例arrArray静态数组arrPoi ntbBOOL布尔值bEn abledbyun sig ned char(BYTE)8位无符号字符byWeekchChar8位字符chGradetchTCHAR如果是 UNICODE,为16位字符tchNamei/nInt整形(其大小依赖于操作系统)iRa ngeuUINT无符号整形(其大小依赖于操作系统)nLen gthusun sig ned short无符号短整形usPortwWORD16位无符号值wParamlLONG32位有符号整形loffsetdwDWORD32位无符号整形dwVolumefFloa

5、t4字节浮点数fHighdDouble8字节浮点数dAm ountcyCURRENCY8字节货币类型cySellP*指针pDocIpFAR *远指针IpDocIpszLPSTR为32位字符串指针IpszNameIpcszLPCSTR32位常量字符串指针IpcszNameIpctszLPCTSTR如果 UNICODE 定义,为32位常量字符串指针IpctszNamebstrBSTR带有4字节长度前缀的w chart数组bstrMessagepbstrBSTR*BSTR数据类型指针pbstrMsgstrStri ngCStri ng类型的字符串strMessageochOLECHAROLECHAR

6、字符类型ochXoszOLECHAR*OLECHAR字符串类型oszXvarVARIANTVARIANT 数据类型varpvarVARIANT*VARIANT 数据类型指针pvarsaSAFEARRAYSAFEARRAY数据类型sapsaSAFEARRAY*SAFEARRAY数据类型指针psadlgCDialogWindows对话框dlgstcCStaticWindows静态文本控件stcedtCeditWindows编辑框控件edtIsbCListBoxWindows列表控件IsbbtnCButt onWindows按钮控件btnscbCScrollBarWindows滚动条控件scbspn

7、CSpi nButto nCtrlWindowswe微调按钮控件spntabCTabCtrlWindows选项卡控件tabrtfCRichEditCtrlWin dows富文本编辑框控件rtfsIdCSIiderCtrlWindow滑块控件sldIistClistCtrlWindows列表控件listtreCtreeCtrlWindows树形控件tredtcCDateTimeCtrlWindows时间选取器控件dtcprgCProgressCtrlWindows讲度指示器控件prgcboCComboBoxWindows组合框控件cboilsClmaaeListWindows图像列表ilstlb

8、CToolBarCtrlWindows 工具条控件tlbmnuCme nuWindows菜单控件mnustaCStatusBarWindows状态条控件stawndCWndWindows 窗口wndexXWin dows X 坐标cxcyYWindows Y 坐标cyPtCpoi ntWindows 点阵hWndsizeCsizeWindows 尺寸sizereet/reCrectWindows 矩形rectpenCpe nWindows 画笔penbrCbrushWindows 刷子brfntCfontWindows 字体fnterCOLORREFWindows 颜色值 RGBcrPMpTe

9、mp临时变量PMpBuffhHa ndleWindows对象句柄hWndIpfnCallback指向CALLBACK函数的远指针lpfnAbortit/iteriterator迭代子itvectstd:vector标准模板库vectmapstd:map标准模板库mapdequestd:deque标准模板库dequeliststd:list标准模板库listsetstd:set标准模板库Setmultisetstd:multiset标准模板库multisetmultimapstd:multimap标准模板库multimap-指针类型的变量,必须加上前缀p,如口: int* pnValue;。-全

10、局(静态)变量的命名规则同第一条的规定,并且必须加上前缀g_。-类成员(静态)变量的命名规则同第一条的规定,并且必须加上前缀m_。-模块(函数/过程)内部的重要变量命名遵循第一条的规定。右:模块(函数/过程)内部的静态变量命名遵循第一条的规定,并且加上前缀s_。-其余变量在不损害程序易读易懂原则的基础上酌情处理。这些变量通常是模块内的临时变量,如循环控制变量、数组的下标等,它们可用缩写进行简化处理,如:int i;。3.1.2.2 常量命名规则,宏倂define)或者常量修饰符(const):大写字母组成的名词词组,单词间用下划线作为连接符,女如: #define INVALID_CLOSE

11、0;const double INVALID_CLOSE = double(O); 。枚举类型(enum):此时的命名规则同变量命名的一般性规则, 可参考MFC或ADO等的命名方式。3.1.2.3 函数命名规则单词构成的动宾词组,每个单词首字母大写,其余字母小写。如:void DrawL ine ( void );。3.1.2.4 类命名规则-类的原型,是前缀C加单词构成的动宾词组,每个单词首字母大写,其余字母小写。如:class CStockPacket; classCPacket;。-类的实例变量,采用小写首字母缩写的方式定义,如:CStockPacket sp;。-在对类的成员变量和成员

12、函数定义时,要加以分类,并界定相应的存取权限(参见表二:类成员的分类描述)表二:类成员的分类描述分类描述存取权限(依实际应用而定)/ Con structorsPublic/ AttributesPrivate/ Operations(对于 com 组件是 /Methods )Public/ OverridablesProtected/ Impleme ntatio nPrivate3.1.2.5 结构命名规则-结构的原型采用组合词的方式定义,并且全部采用大写字符的形 式。如:typedef struct tagStockTra nsDWORDdwOpe n; STOCKTRANS;-结构的实

13、例变量,采用小写首字母缩写的方式定义,女口:STOCKTRANS st;。3.1.3语句构造规则3.131般性的原则:简单而直接,尽量避免出现难懂的技巧型代码。3.1.3.2 为追求效率而出现的技巧型代码,必须加上足够详细的注释。3.1.3.3 对以下的规则不做硬性规定,可酌情考虑:一个函数/过程的代码行数控制在 60行(A4打印纸可打印的行数)以内。尽量避免复杂的测试条件。避免使用过深的(3级以上)循环或条件嵌套,必要时可采用goto语句。循环或条件中的语句块控制在60行以内。利用括号使逻辑表达式或算术表达式的运算次序清晰直 观。3.1.4书写格式规则/3.1.4.1 一行一条语句,赋值语句

14、可例外,如: i = 0, j = 1, k = 2; 。3.1.4.2 层次结构清晰明显: 与 各占一行。 所在的列与其前一行语句对齐; 所在的列与对应的 对齐。 与 之间的语句相对缩进一个 Tab 键(设为 4 个空格 字符)。注释与相关的代码首列对齐。3.1.4.3 空行和空格一组相关的函数 / 过程间以一个空行分隔;组间两个空 行。行内注释 (/) 部分与语句间以空格或 Tab 分隔,数量酌 情。多个函数参数或测试条件间用一个空格分隔。3.1.5 注释规则3.1.5.1 序言性注释 在模块开始处简要描述模块的功能、主要算法、接口特点、 重要数据等的解释性说明。源程序(.cpp, .h

15、etc)文件的开始处的格式(行宽80列以内):/ 文件名称 : OptimizeObj.cpp/ Version xxx.xx.xx/ C opyright(c) 1999-2001 APEX International (ShangHai) Inc./ 创 建 人: XXX/ 创建日期 : YYYY/MM/DD/ 描 述 :/ 修 改 人: XXX/ 修改日期 : YYYY/MM/DD/ 修改原因 :/ 描 述 :/=重要函数/过程的开始处的格式 (行宽80 列以内):/=/ 类属: / 函数名称 : DemoFunc/ 参数 : int nParam1 - 参数一/LPCSTR lpszP

16、aram2 -参数二/int* pnParam3 - out参数三/ 返回类型 : BOOL/TRUE - 成功/FALSE - 失败/ 功能描述 :/ 全局变量 :/ 调用模块 :/ 备 注 : pnParam3 需要调用者释放内存/ 创 建 人: XXX/ 创建日期 : YYYY/MM/DD/ 描 述 :/ 修 改 人: XXX/ 修改日期 : YYYY/MM/DD/ 修改原因 :/3.1.5.2 数据说明注释函数 / 过程中重要的变量必须加上注释,一行定义一个变 量,注释放在行尾。3.1.5.3 插入性注释在程序中间与一段代码有关的解释性说明。对于大段的功能相关代码的注释从行首开始,与前

17、面的 代码段分隔一行。对于小段 (三四行以内 )代码的注释放在语句末或下一行3.2 源代码标注规范(for ASP )在编写asp程序时,主要用到 HPML javascript 、vbscript 等语言,下面 将以vbscript为例详细说明编写规范,javascript语言规范请参考vbscript 。3.2.1编码约定概述编码约定是帮助您使用Microsoft Visual Basic Script ingEdition编写代码的一些建议。编码约定包含以下内容:对象、变量和过程的命名规则注释约定*文本格式和缩进指南使用一致的编码约定的主要原因是使脚本或脚本集的结构和编码样式标 准化,这

18、样代码易于阅读和理解。使用好的编码约定可以使源代码明白、 易读、准确,更加直观且与其他语言约定保持一致。3.2.2 常数命名规则VBScript的早期版本不允许创建用户自定义常数。如果要使用常数,则 常数以变量的方式实现,且全部字母大写以和其他变量区分。常数名中 的多个单词用下划线(_)分隔。例如:USER_LIST_MAXNEW_LINE这种标识常数的方法依旧可行,但您还可以选择其他方案,用Const语 句创建真正的常数。这个约定使用大小写混合的格式,并以“con”作为 常数名的前缀。例如:conY ourOw nCon sta nt3.2.3 变量命名规则为提高易读和一致性,请在 VBSc

19、ript代码中使用以下变量命名规则:子类型前缀示例Boolea nblnblnFoundBytebytbytRasterDataDate (Time)dPMdPMStartDoubledbldblTolera neeErrorerrerrOrderNumIn tegerintin tQua ntityLo nglngIn gDista neeObjectobjobjCurre ntSi nglesngsn gAverageStri ngstrstrFirstName324 变量作用域变量应定义在尽量小的作用域中。VBScript变量的作用域如下所示:作用域声明变量处可见性过程级事件、函数或子过

20、程。在声明变量的过程中可 见。Script 级HPML页面的 HEAD部分,任何过 程之外。在脚本的所有过程中可 见。325 变量作用域前缀随着脚本代码长度的增加,有必要快速区分变量的作用域。在类型前缀 前面添加一个单字符前缀可以实现这一点,而不致使变量名过长。作用域前缀示例过程级无dblVelocityScript 级s_s bl nCalcI nProgress326 描述性变量名和过程名变量名或过程名的主体应使用大小写混合格式,并且尽量完整地描述其 目的。另外,过程名应以动词开始,例如In itNameArray 或CloseDialog。对于经常使用的或较长的名称,推荐使用标准缩写以使

21、名称保持在适当 的长度内。通常多于32个字符的变量名会变得难以阅读。使用缩写时, 应确保在整个脚本中保持一致。例如,在一个脚本或脚本集中随意切换 Cnt和Count将造成混乱。3.2.7对象命名规则F表列出了 VBScript 中可能用到的对象命名规则(推荐):对象类型前缀示例3D面板pnlpnl Group动画按钮anian iMailBox复选框CHKchkReadO nly组合框、下拉列表框cbocboE nglish命令按钮cmdcmdExit公共对话框digdigFiieOpe n框架frafraLa nguage水平滚动条hsbhsbVoiume图像imgimgIc on标签ibl

22、ibiHeiPMessage直线linii nV erticai列表框1stistPoiicyCodes旋钮spnspnPages文本框txttxtLastName垂直滚动条vsbvsbRate滑块sidsidScaie328代码注释约定所有过程的开始部分都应有描述其功能的简要注释。这些注释并不描述 细节信息(如何实现功能),这是因为细节有时要频繁更改。这样就可 以避免不必要的注释维护工作以及错误的注释。细节信息由代码本身及 必要的内部注释来描述。当传递给过程的参数的用途不明显,或过程对参数的取值范围有要求时, 应加以说明。如果过程改变了函数和变量的返回值(特别是通过参数引 用来改变),也应在

23、过程的开始部分描述该返回值。过程开始部分的注释应包含以下区段标题。相关样例,请参阅后面的“格 式化代码”部分。区段标题注释内容目的过程的功能(不是实现功能的方法)。假设其状态影响此过程的外部变量、控件或其他兀 素的列表。效果过程对每个外部变量、控件或其他兀素的影响 效果的列表。输入每个目的不明显的参数的解释。每个参数都应 占据单独一行并有其内部注释。返回返回值的解释。请记住以下几点:*每个重要的变量声明都应有内部注释,描述变量的用途。*应清楚地命名变量、控件和过程,仅在说明复杂细节时需要内部注释。应在脚本的开始部分包含描述该脚本的概述,列举对象、过程、运算 法则、对话框和其他系统从属物。有时一

24、段描述运算法则的假码是很 有用的。329格式化代码应尽可能多地保留屏幕空间,但仍允许用代码格式反映逻辑结构和嵌套。 以下为几点提示:标准嵌套块应缩进 4个空格。过程的概述注释应缩进 1个空格。概述注释后的最高层语句应缩进 4个空格,每一层嵌套块再缩进 4个空格。在每个asp文件的开头需要按一下规范编码:文件名称:OptimizeObj.aspVersi on xxx.xx.xxC opyright(c) 1999-2001 APEX International (ShangHai) Inc.创建人:XXX仓U建日期:YYYY/MM/DD描述:修改人:XXX修改日期:YYYY/MM/DD修改原因

25、:描述:F列代码符合VBScript函数编码规范函数名称:DemoFunc参数:n Param1 -参数一lpszParam2 -参数pn Param3参数三返回:功能描述:备注:创建人:XXX仓U建日期:YYYY/MM/DD描述:修 改 人: XXX 修改日期 : YYYY/MM/DD 修改原因 :Function intFindUser (strUserList(), strTargetUser)Dim i Loop counter.Dim blnFound 找到目标标志intFindUser = -1i = 0 初始化循环计数器Do While i = Ubound(strUserLis

26、t) and Not blnFoundIf strUserList(i) = strTargetUser Then blnFound = True 将标志设置为 TrueintFindUser = i 将返回值设置成循环计数End Ifi = i + 1 递增循环计数器LoopEnd Function3.3 源代码标注规范( for Java )3.3.1命名规范Package 的命名Package 的名字应该都是由一个小写单词组成。Class 的命名Class 的名字必须由大写字母开头而其他字母都小写的单词组成Class 变量的命名 变量的名字必须用一个小写字母开头。后面的单词用大写字母开头

27、。Static Final 变量的命名Static Final 变量的名字应该都大写,并且指出完整含义。参数的命名 参数的名字必须和变量的命名规范一致。数组的命名 数组应该总是用下面的方式来命名:byte buffer;而不是:byte buffer;方法的参数使用有意义的参数命名,如果可能的话,使用和要赋值的字段一样的名字:setCounter(int size)this.size = size;3.3.2Java 文件的样式规则所有的 Java(*.java) 文件都必须遵守如下的样式规则版权信息版权信息必须在 java 文件的开头,比如:/* Copyright ? 2000 Shang

28、hai XXX Co. Ltd.* All right reserved.*/其他不需要出现在 javadoc 的信息也可以包含在这里。Package/Importspackage 行要在 import 行之前, import 中标准的包名要在本地的包名之前,而且按照 字母顺序排列。如果 import 行中包含了同一个包中的不同子目录,则应该用 * 来处 理。package .stats;import java.io.*;import java.util.Observable;import hotlava.util.Application;这里 java.io.* 使用来代替 InputStr

29、eam and OutputStream的。Class 接下来的是类的注释,一般是用来解释类的。/* A class representing a set of packet and byte counters* It is observable to allow it to be watched, but only* reports changes when the current set is complete*/接下来是类定义,包含了在不同的行的 extends 和 implementspublic class CounterSetextends Observableimplements

30、 CloneableClass Fields接下来是类的成员变量:* Packet counters*/protected int packets;public 的成员变量必须生成文档(JavaDoc)。proceted、private 禾口 package 定义的成员变量如果名字含义明确的话,可以没有注释。存取方法接下来是类变量的存取的方法。 它只是简单的用来将类的变量赋值获取值的话, 可以简 单的写在一行上。* Get the counters* return an array containing the statistical data. This array has been* fr

31、eshly allocated and can be modified by the caller.*/public int getPackets() return copyArray(packets, offset); public int getBytes() return copyArray(bytes, offset); public int getPackets() return packets; public void setPackets(int packets) this.packets = packets; 其它的方法不要写在一行上构造函数 接下来是构造函数,它应该用递增的方

32、式写(比如:参数多的写在后面)。 访问类型 (public, private等.) 和 任何 static, final或synchronized 应该在一行中,并且方法和参数另写一行,这样可以使方法和参数更 易读。publicCounterSet(int size)this.size = size;克隆方法clone 方法:如果这个类是可以被克隆的,那么下一步就是publicObject clone() try CounterSet obj = (CounterSet)super.clone();obj.packets = (int)packets.clone();obj.size = si

33、ze;return obj;catch(CloneNotSupportedException e) throw new InternalError(Unexpected CloneNotSUpportedException: + e.gePMessage();类方法 下面开始写类的方法:* Set the packet counters* (such as when restoring from a database)*/ protected final void setArray(int r1, int r2, int r3, int r4)throws IllegalArgumentExc

34、eption/ Ensure the arrays are of equal size/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);toString 方法 无论如何,每一个类都应该定义

35、 toString 方法:publicString toString() String retval = CounterSet: ;for (int i = 0; i 0) i + ; /错误, 和 在同一行if (i0)i +; /正确, 单独作为一行 语句永远单独作为一行 . 语句应该缩进到与其相对应的 那一行相对齐的位置。括号左括号和后一个字符之间不应该出现空格 , 同样 , 右括号和前一个字符之 间也不应该出现空格 . 下面的例子说明括号和空格的错误及正确使用 :CallProc( AParameter ); / 错误CallProc(AParameter); / 正确不要在语句中使用

36、无意义的括号 . 括号只应该为达到某种目的而出现在 源代码中。下面的例子说明错误和正确的用法 :if (I) = 42) / 错误 - 括号毫无意义if (I = 42) or (J = 42) / 正确 - 的确需要括号exit()exit 除了在 main 中可以被调用外,其他的地方不应该调用。因为这样 做不给任何代码有机会来截获退出。 一个类似后台服务地程序不应该因为 某一个库模块决定了要退出就退出。异常申明的错误应该抛出一个 RuntimeException 或者派生的异常。顶层的 main() 函数应该截获所有的异常,并且打印(或者记录在日志中)在屏幕上。垃圾收集JAVA使用成熟的后

37、台垃圾收集技术来代替引用计数。但是这样会导致一 个问题:你必须在使用完对象的实例以后进行清场工作。比如一个 perl 的程序员可能这么写:FileOutputStream fos = new FileOutputStream(projectFile); project.save(fos, IDE Project File);除非输出流一出作用域就关闭,非引用计数的程序语言,比如JAVA,是不能自动完成变量的清场工作的。必须象下面一样写:FileOutputStream fos = new FileOutputStream(projectFile);project.save(fos, IDE P

38、roject File);fos.close();clone下面是一种有用的方法:implements CloneablepublicObject clone()try ThisClass obj = (ThisClass)super.clone();obj.field1 = (int)field1.clone();obj.field2 = field2;return obj; catch(CloneNotSupportedException e) throw new InternalError(Unexpected CloneNotSUpportedException: + e.gePMes

39、sage();final 类 绝对不要因为性能的原因将类定义为 final 的(除非程序的框架要求) 如果一个类还没有准备好被继承, 最好在类文档中注明, 而不要将她定义 为 final 的。这是因为没有人可以保证会不会由于什么原因需要继承她。问类的成员变量 大部分的类成员变量应该定义为 protected 的来防止继承类使用他们。 注意,要用 int packets ,而不是 int packets ,后一种永远也不 要用。public void setPackets(int packets) this.packets = packets; CounterSet(int size) this

40、.size = size;byte 数组转换到 characters为了将 byte 数组转换到 characters ,你可以这么做:Hello world!.getBytes();Utility 类Utility 类(仅仅提供方法的类) 应该被申明为抽象的来防止被继承或被 初始化。初始化 下面的代码是一种很好的初始化数组的方法:objectArguments = new Object arguments ;枚举类型JAVA 对枚举的支持不好,但是下面的代码是一种很有用的模板:class Colour public static final Colour BLACK = new Colour

41、(0, 0, 0);public static 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 等可以象其他语言的枚举类型一样使用的 常量。 他们可以用 =

42、 操作符来比较。 但是这样使用有一个缺陷:如果一个用户用这样的方法来创建颜色 BLACK new Colour(0,0,0)那么这就是另外一个对象, = 操作符就会产生错误。她的 equal() 方法仍 然有效。由于这个原因,这个技术的缺陷最好注明在文档中,或者只在自己 的包中使用。3.3.4 Swing避免使用 AWT 组件混合使用 AWT 和 Swing 组件如果要将 AWT 组件和 Swing 组件混合起来使用的话,请小心使用。实际 上,尽量不要将他们混合起来使用。滚动的 AWT 组件AWT 组件绝对不要用 JscrollPane 类来实现滚动。滚动 AWT 组件的时候 一定要用 AWT

43、 ScrollPane 组件来实现。避免在 InternalFrame 组件中使用 AWT 组件 尽量不要这么做,要不然会出现不可预料的后果。Z-Order 问题AWT 组件总是显示在 Swing 组件之上。当使用包含 AWT 组件的 POP-UP 菜单的时候要小心,尽量不要这样使用。3.3.5 调试调试在软件开发中是一个很重要的部分,存在软件生命周期的各个部分中。调试能够用 配置开、关是最基本的。很常用的一种调试方法就是用一个 PrintStream 类成员,在没有定义调试流的时候就 为 null ,类要定义一个 debug 方法来设置调试用的流。3.3.6 性能在写代码的时候,从头至尾都应

44、该考虑性能问题。这不是说时间都应该浪费在优化代码 上,而是我们时刻应该提醒自己要注意代码的效率。比如:如果没有时间来实现一个高 效的算法,那么我们应该在文档中记录下来,以便在以后有空的时候再来实现她。 不是所有的人都同意在写代码的时候应该优化性能这个观点的, 他们认为性能优化的问 题应该在项目的后期再去考虑,也就是在程序的轮廓已经实现了以后。不必要的对象构造 不要在循环中构造和释放对象使用 StringBuffer 对象在处理 String 的时候要尽量使用 StringBuffer 类, StringBuffer 类是构成 String 类的基础。 String 类将 StringBuffe

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

46、chronized ,应该在必要的时候再使用她,这是一个 避免死锁的好方法。3.3.7 可移植性synchronizedBorland Jbulider 不喜欢 synchronized 这个关键字,如果你的断点设在这些关键字的作用域 内的话,调试的时候你会发现的断点会到处乱跳, 让你不知所措。 除非必须, 尽量不要使用。换行 如果需要换行的话,尽量用 println 来代替在字符串中使用 n 。 你不要这样:System.out.print(Hello,world!n);要这样:System.out.println(Hello,world!);或者你构造一个带换行符的字符串,至少要象这样:String newline = System.getProperty(line.separator); System.out.println(Hello world + newline);PrintStreamPrintStream 已经被不赞成( deprecated )使用,用 PrintWrite 来代替她。

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!