华为JAVA编码规范.docx
- 文档编号:24952492
- 上传时间:2023-06-03
- 格式:DOCX
- 页数:20
- 大小:24.63KB
华为JAVA编码规范.docx
《华为JAVA编码规范.docx》由会员分享,可在线阅读,更多相关《华为JAVA编码规范.docx(20页珍藏版)》请在冰豆网上搜索。
华为JAVA编码规范
1.程序块采用缩进风格,空格为4个.
说明:
对于开发工具自动生成的代码可以不一致
2.分界符(如大括号{和})应各自占一行并且在同一列,同时与引用它们的语句左对齐,在方法的开始,类和接口的定义,以及if,for,do,while,switch,case语句都要采用上述缩进
说明:
for(…)
{
…
说明:
if(filename!
=null
&&newFile(logPath+filename).length()<())
{
3.…作符)
说明:
采用这种松散方式编写代码目的是让程序更加清晰,由于空格所产生的清晰性是相对的,所以在已经很清晰的语句中没有必要留空格,如果语句已足够清晰,则括号内侧(即左括号后面和右括号前面)不需要加空格,多重括号间不必加空格,因为java中括号已经是很清晰的标志了.在长句中,如果需要加的空格非常多,那么应该保持整体清晰,而在局部中不加空格,给操作符留空格时不要连续留两个以上空格
4.类属性和方法不要交叉放置,不同存取范围的属性和方法也不要交叉放置
说明:
类定义:
{
类公有属性定义;
类保护属性定义;
类私有属性定义;
类公有方法定义;
类保护方法定义;
类私有方法定义;
}
5.源程序的有效注释量必须在30%以上
6.包的注释写入一个名为的html格式的说明文件放入当前路径
7.包的注释内容:
本包作用,详细描述本包内容,产品模块名称及版本,公司版本
说明:
一句话描述
详细描述
产品模块
公司版本信息
8.文件注释:
写入文件头部,包名之前
9.文件注释内容:
版本说明,描述信息,修改历史,生成日期
说明:
/*
*文件名
*版权
*描述
*修改人
*修改时间
*修改内容
*跟踪单号
*修改单号
*/
10.类和接口注释:
放在package注释之后,class或interface之前
11.类和接口注释内容:
类的注释要一句话功能描述,功能详细描述
说明:
/**
*<一句话功能简述>
*<功能详细描述>
*@author
*@version
*@see[相关类/方法]
*@since[产品/模块版本]
*@deprecated(表示不建议使用该类或者接口)
12.类属性,公有和保护方法注释:
写在类属性,公有和保护方法上面
13.成员变量注释内容:
成员变量的意义,目的,功能,可能被用到的地方
14.公有和保护方法注释的内容:
方法的一句话功能描述,功能详细描述,输入参数,输出参数,返回值,违例
说明:
/**
*@param
*@return
*@exception/throws
*/
15.对于方法内部用throw抛出的异常,要在方法的注释中标明,对于调用其他方法抛出的异常,选主要的在注释中说明,对于非RuntimeException,即throws子句声明会抛出的异常,必须在方法的注释中标明
16.注释应与描述的代码相近,对代码的注释应放在代码上方或者右方(单行注释)相邻位置,不可放在下面,如放于上方则与上面代码用空行隔开
17.注释与描述的内容进行同样的缩进
18.对变量的定义和分支语句,必须加以注释
19.对于switch下的case语句,如果处理完一个case要进入下一个case,必须在该case处理完,下一个case前加上明确的注释
说明:
这样比较清楚程序编写者的意图,有效防止无故遗漏break语句
20.边写代码边写注释,修改代码同时修改注释保证代码和注释一致,没用的注释要删除
21.注释内容要清楚,明了,含义明确,防止二义性
22.不要在注释中用缩写
说明:
除非必要,在使用缩写时或之前,应对缩写进行必要的说明
23.不要在一行代码或表达式中间加注释
说明:
除非必要,不应在代码或表达式中间插入注释,否则容易使代码可理解性变差。
24.通过对函数,过程,变量,结构的正确命名,以及合理的组织代码,使代码成为自注释的
25.在代码的功能,意图层次上进行注释,提供有用的,额外的信息
示例.如下注释意义不大。
26.下来的部分可以详细描述
说明:
JavaDoc工具收集简介的时候使用选取第一句话。
27.顺序实现流程的说明使用1,2,3,4.在每个实现步骤的代码前进行注释
示例:
如下是对设置属性的流程注释。
断输入参数是否有效。
……
置本地变量
……
28.一些复杂的代码要说明
示例:
这里主要是对闰年算法的说明。
果能被4整除,是闰年;
果能被100整除,不是闰年;
果能被400整除,是闰年;
29.包名采用域后缀倒置加上自定义包名,用小写字母,在部门内部要规划好包名的范围,防止冲突,部门内部产品使用部门的名称加上模块名称,产品线的产品使用产品的名称加上模块名称
格式:
.产品名.模块名称
.部门名称.项目名称
30.示例:
融合WEBSMAP包名通用消息转发包名类名和接口使用完整意义的英文描述,英文首字母大写,其他使用小写和大写的混合
示例:
OrderInformation,CustomerList,LogManager,LogConfig,SmpTransation
31.方法名使用完整意义的英文描述,首字母小写,剩余字母首字母大写,其他字母小写
示例:
privatevoidcalculateRate();
publicvoidaddNewOrder();
32.方法中存取属性的方法用setter方法和getter方法,动作方法采用动词和动宾结构
格式:
get+非布尔属性名()
set+属性名()
is+布尔属性名()
动词()
动词+宾语()
示例:
publicStringgetType();
publicbooleanisFinished();
publicvoidsetVisible(boolean);
publicvoidaddKeyListener(Listener);
33.属性名使用完整意义的英文描述,第一个单词字母小写,剩余单词首字母大写,其余字母小写,属性名不能和方法名相同
示例:
privatecustomerName;
privateorderNumber;
privatesmpSession;
34.常量名使用全大写英文,英文单词之间用下划线隔开,并使用finalstatic修饰
示例:
publicfinalstaticintMAX_VALUE=1000;
publicfinalstaticStringDEFAULT_START_DATE=“2008-11-06”;
35.属性名可以和公有方法参数相同,不能和局部变量相同,引用非静态成员变量时用this,引用静态成员变量时用类名
示例:
publicclassPerson
{
privateStringname;
privatestaticListproperties;
publicvoidsetName(Stringname)
{
=name;
}
publicvoidsetProperties(Listproperties)
{
Person.Properties=properties;
}
}
36.常用组件的命名以组件名加上组件类型名结尾
示例:
Application类型的,命名以App结尾---MainApp;
Frame类型的,建议命名以Frame结尾---TopoFrame;
Panel类型的,建议命名以Panel结尾—CreateCircuitPanel;
Bean类型的,建议命名以Bean结尾---DataAccessBean;
EJB类型的,建议命名以EJB结尾--DBProxyEJB;
Applet类型的,建议命名以Applet结尾---PictureShowApplet;
37.函数名超过15个字母可采用去掉元音字母的方法或行业内约定俗成的缩写方式缩写函数名
示例:
getCustomerInformation()改为getCustomerInfo()
38.准确的确定成员函数的存取控制符,不是必须使用public的请用protected,不是必须用protected的请用private
示例:
protectedvoidsetUserName()
privatevoidcalculateRate()
39.含有集合意义的属性命名,尽量包含复数的意义
示例:
customes;orderItems
40.明确方法功能,精确实现方法设计,一个函数完成一个功能,简单的功能也要编写方法实现
说明:
虽然为仅用一两行就可以完成的功能去编写方法好像没有必要,但用方法可使功能明确化,增加程序可读性,亦可方便维护、测试。
41.明确规定对接口方法参数的合法性检查应由方法的调用者负责还是有接口方法本身负责,缺省由方法调用者负责
说明:
对于模块间接口方法参数的合法性检查这一问题,往往有两个极端现象,即:
要么是调用者和被调用者对参数均不作合法性检查,结果就遗漏了合法性检查这一必要的处理过程,造成问题隐患,要么就是调用者和被调用者均对参数进行合法性检查,这种情况虽不会造成问题,但产生了冗余代码,降低了效率。
42.明确类的功能,精确实现类的设计,一个类仅实现一组相近功能
说明:
划分类的时候,应该尽量把逻辑处理、数据和显示分离。
实现类功能的单一性。
示例:
数据类不能包含数组处理的逻辑
通信类不能包含显示处理的逻辑
43.所有的数据类必须重载toString()方法,返回该类有意义的内容
说明:
父类如果实现了比较合理的toString(),子类可以继承不必再重写。
示例:
publicTopoNode
{
privateStringnodeName;
publicStringtoString()
{
Return“NodeName:
”+nodeName;
}
}
44.数据库操作,IO操作要使用close()的对象要在try-catch-finally的finally中close()
示例:
try
{
45.往看不出出了什么错.
46.一个方法不应抛出太多类型的异常
47.异常捕获尽量不要直接catch(Exceptionex),要把异常细分处理
48.如果多段代码重复做同一件事情,那么在方法划分上可能存在问题
49.对于创建的主要的类,最好置入main()方法,包含用于测试那个类的代码
50.集合中的数据如果不使用应及时释放,尤其是可重复使用的集合
51.源程序中关系紧密的代码应尽可能相邻
52.不要使用难懂的技巧很高的语句,除非很有必要
53.在switch中每个case后面要加上return或者break
54.在运算中不要减少数据精度
55.switch中的case要和后面的常量保持一个空格,switch语句中不要定义case之外的无用标签
56.不要在if中使用等号=进行赋值
57.静态成员或方法使用类名访问,不使用句柄访问
58.方法重载时,方法名一定要相同,避免类中使用两个相似的方法名
76.包的注释内容要求:
简述本包的作用详细描述本包的内容,产品模块名称和版本,公司版权
77.不要在Componentlisttener,componentResied()方法中调用serResize()方法.
78.不要覆盖父类的静态方法和私有方法
79.不要覆盖父类的属性
80.不要使用二级以上的内部类
81.把内部类定义成私有类
82.去掉接口中多余的定义(不使用public,abstaract,static,final等这是接口默认的)
83.不要定义不会被用到得局部变量,类私有属性和私有方法和方法参数
84.显示初始化所有的静态属性
85.不要使用System,getenv()方法
86.不要硬编码‘\n’‘\r’作为换行符
87.不要直接使用里面的接口
88.使用(),不使用循环来复制数组
89.避免不必要的instanceof比较运算和类造型运算
90.不要在finalize()方法中删除监听器(listeners)
91.在finalize()方法中的finally中调用()方法
92.在finalize()方法中调一定调用()方法
93.进行字符转换的时候应该尽可能的较少临时变量
94.使用ObjectStream的方法后,调用reset()释放对象
95.线程同步中,在循环里面使用条件测试(使用while(isWait)wait()代替If(iswait)wait)
96.不调用Thread类的resume(),suspend(),stop()方法
97.减小单个方法的复杂度使用的if,while,for,switch语句要在10个以内
98.在servelts中重用jdbc连接数据源
99.减少在servle中使用的同步方法
100.不定义在包中没有被用到的友好的属性,方法和类
101.没有子类的友好类应该定义为final方法定义为final
102.数据库操作,IO操作等需要使用结束close()的对象必须try-catch-catch-finally的finally中close().
103.为switch语句提供一个default选项
104.不要在for循环体中对计数器赋值
105.不要给非公有类定义public构造器
106.不要对浮点数进行比较运算如==!
=减少<,>运算
107.实现equals()方法时先用getClass()或者instanceof进行类型比较通过后才能继续比较
108.不要重载main()方法用作除入口以外的其它用途
109.方法的参数后不要和类中的方法名相同
110.除了构建器外,不要使用和类名相同的方法名
111.不要定义Error和RuntimeException的子类,可以定义Exception的子类
112.线程中需要实现run()方法
113.使用equals()比较两个类的值是否相同
114.字符串和数字运算结果连接的时候,应该是把数字运算部分用小括号括起来
115.类中不要使用非私有(公有,保护,友好)的非静态属性
116.在类中对于没有实现的接口应该定义成抽象方法,类应该定义成抽象类
117.不要显示导入.*包
118.初始化时不要使用类的非静态属性
119.显示初始化时所有的局部变量,
120.按照方法名把方法排序放置,同名和同类型的方法应该放在一起
121.不要在抽象类的构造器中调用抽象方法
122.重载equals()方法时应该重载hashcode()方法
123.工具类不要定义构造器包括私有构造器
124.不要在switch中使用10个以上的case语句
125.把main()方法放在类的最后
126.生命方法违例的时候不要使用Exception应该使用它的子类
127.不要直接扔出一个error应该扔出它的子类
128.在进行比较的时候,总是把常量放在同一边
129.在可能的情况下,总是为类定义一个缺省的构造器
130.在捕捉异常的时候不使用Exception,,RuntimException,,,,Throwable最好用它子类
131.在接口和工具类中定义常量,
132.使用大写”L”表示long常量
133.方法需要同样数量参数的注释用@param
134.不要在注释中使用不支持的标示@unsupported
135.不要使用Runtime,exec()方法
136.不要使用自定义本地方法
137.使用集合时初始化容量
138.不要在循环体内调用同步方法和使用复杂的表达式
139.不要在循环体内定义变量,
140.使用StringBuffer时初始化容量
141.少用!
142.尽可能对接口进行instanceof运算
143.不要显示调用finalize()
144.不要使用静态集合其内存占用增长没有界限
145.不要重复调用一个方法获取对象,使用局部变量重用对象
146.线程中用notifyAll()代替notify();
147.避免在同步方法中调用另一个同步方法造成的死锁,
148.非同步方法中不能调用wait()notify()方法
149.不要使用同步方法,使用同步块
150.用wait()notify()代替while()sleep(),
151.把所有的公有方法定义为同步方法
152.实现Runable,run()方法必须是同步方法
153.在clone()方法中应该而且必须使用()而不是new
154.使用StringTokenizer代替indexof()和substrin()
155.不要对参数进行赋值
156.不要使用String类的compareTo()equals()方法
157.不要使用servler的SingletThreadModel会消耗大量资源
158.在Switch中每个Case语句都应该包含break或者return。
159.不要使用空的for,if,,while语句。
160.在运算中不要减小数据的精度。
161.Switch语句中的Case关键字要和后面的常量保持一个空格,Switch语句中不要定义Case之外的无用标签。
162.不要在if语句中使用等号=进行赋值操作。
163.静态成员或者方法使用类名访问,不使用句柄访问。
164.方法重载的时候,一定要注意方法名相同,避免类中使用两个非常相似的方法名。
165.不要在ComponentListener,ComponentResized()方法中调用serResize()方法。
166.不要覆盖父类的静态方法和私有方法。
167.不要覆盖父类的属性。
168.不要使用两级以上的内部类。
169.把内部类定义成私有类。
170.去掉接口中多余的定义(不使用public,abstrac,static,final等,这是接口中默认的)。
171.不要定义不会被用到的局部变量,类私有属性,类私有方法和方法参数。
172.显式寝化所有的静态属性。
173.不要使用Systemgetenr()方法。
174.不要硬编码’\n’和’\r’作为换行符号。
175.不要直接使用里面的接口。
176.使用System.arraycopy(),不要使用循环来复制数组。
177.避免不必要的instenceof比较运算和类造型运算。
178.不要在finalize()方法中删除临听器(listeners)。
179.在finalize()方法中一定要调用superfinalize()方法。
180.在finalize()方法中的finally中调用superfinalize()方法。
181.进行字符转换的时候应该尽可能的较少用临时变量。
182.使用Objectstream的方法后,调用reset()释放对象。
183.线程同步中,在循环里面使用条件测试(使用while(isWait)Wait()代替if(isWait)Wait())。
184.不使用Thread类的resume(),suspend(),stop()方法。
185.减小单个方法的复杂性度,使用的if,while,for,switch语句要在10个以内。
186.在Servlet中,重用JDBC连接的数据源。
187.减少在Servlets中使用的同步方法。
188.不定义在包中没有被用到的友好属性,方法和类。
189.没有子类的友好类应该定义成final。
190.没有被覆盖的友好方法应该定义成final。
191.为Switch语句提供一个default选项。
192.不要在for循环体中对计数器的赋值。
193.不要给非公有类定义public构建器。
194.不要对浮点数进行比较运算,尤其是不要进行==,!
=运算,减少><运算。
195.实现equals()方法时,先用getclass()或者instanceof进行类型比较,通过后才能继续比较。
196.不要重载main()方法用作除放口以外的其他用途。
197.方法的参数名不要和类中方法名相同。
198.除了构建器外,不要使用和类名相同的方法名。
199.不要定义Error和RuntimeException的子类,可以定义Exception了子类。
200.线程中需要实现run()实现。
201.使用equals()比较两个类的值是否相同。
202.字符串和数字运算结果相连接的时候应该把数字运算部分用小括号括起来。
203.类中不要使用非私有(公月,保护和友好)的非静态属性。
204.在类中对于没有实现的接口,应该定义成抽象方法,类应该定义成抽象类(5级)
205.不要显示导入.*包。
206.初始化时,不要使用类的非静态属性。
207.显示初始化所有的局部变量。
208.按照方法名把方法排序放置,同名合同类型的方法应该放在一起。
209.不要使用嵌套赋值,即在一个表达式中使用多个=。
210.不要在抽象类的构建器中调用抽象方法。
211.重载equals()方法的同时,也应该重载hushcode()方法。
212.工具类(utility)不要定义构建器。
包括私有构建器。
213.不要在switch中使用10个以上的case语句。
214.把main()方法放在类的最后。
215.声明方法违例的时候不要使用Exception,应该使用它的子类。
216.不要直接仍出Error,应该扔出它的子类。
217.在进行比较的时候,总是把常量放在同一边(都放在左边或者都放在右边)。
218.在可能的情况下,总是为类定义一个缺省的构造器。
219.在捕获违例的时候,不使用Exception,runtimeException,Throwable尽可能使用它们的子类。
220.在接口或者工具类中定义常量(5级)。
221.使用大写“L”表示Long常量(5级)。
222.main()方法必需是publicstaticvoidmain(String[])。
223.对返回类型为boolean的方法使用is开头,其它类型的不能使用。
224.对非boolean类型取值方法(getter)使用get开头,其它类型的不能使用。
225.对于设置值的方法(setter)使用set开头,其它类型不能使用。
226.方法需要有同样数量参数的注释@param。
227.不要在注释中使用不支持的标记,如:
@unsupported.
228.不要使用Runtime,exec()方法。
229.不要自定义本地方
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 华为 JAVA 编码 规范