说明:
对于开发工具自动生成的代码可以不一致
说明:
for(…)
{
…//your code
}
说明:
if(filename != null
&& new File(logPath+filename).length() < logConfig.getFileSize())
{
…//your code
}
说明:
LogFilename wow = null;
LogFilename that = null;
说明:
if(writeToFile)
{
writeFileThread.interrupt();
}
说明:
if(log.getLevel() < log.getRecord())
{
return ;
}
//空行
LogWrite writer;
说明:
以免使用不同的编辑器阅读程序时,因TAB键所设置的空格数不同而造成程序布局不整齐,JBuildr,UltraEdit等编辑环境,支持行首TAB替换成空格,应将该选项打开
说明:
采用这种松散方式编写代码目的是让程序更加清晰,由于空格所产生的清晰性是相对的,所以在已经很清晰的语句中没有必要留空格,如果语句已足够清晰,则括号内侧(即左括号后面和右括号前面)不需要加空格,多重括号间不必加空格,因为java中括号已经是很清晰的标志了.在长句中,如果需要加的空格非常多,那么应该保持整体清晰,而在局部中不加空格,给操作符留空格时不要连续留两个以上空格
说明:
类定义:{
类公有属性定义;
类保护属性定义;
类私有属性定义;
类公有方法定义;
类保护方法定义;
类私有方法定义;
}
说明:
<html>
<body>
<p>一句话描述
<p>详细描述
<p>产品模块
<br>公司版本信息
</body>
</html>
说明:
/*
*文件名
*版权
*描述
*修改人
*修改时间
*修改内容
*跟踪单号
*修改单号
*/
说明:
/**
*<一句话功能简述>
*<功能详细描述>
*@author
*@version
*@see [相关类/方法]
*@since [产品/模块版本]
*@deprecated (表示不建议使用该类或者接口)
说明:
/**
*@param
*@return
*@exception /throws
*/
说明:
这样比较清楚程序编写者的意图,有效防止无故遗漏break语句
说明:除非必要,在使用缩写时或之前,应对缩写进行必要的说明
说明:除非必要,不应在代码或表达式中间插入注释,否则容易使代码可理解性变差。
示例.如下注释意义不大。
//如果receiveFlag为真。
If(receiveFlag)
而如下的注释则给出了额外有用的信息。
//如果从连结收到信息
If(receiveFlag)
说明:当代码段较长,特别是多重嵌套时,这样做可以使代码更清晰,更便于阅读。
示例:参见如下例子。
If(……)
{
program code1
while(index <MAX_INDEX)
{
program code2
} / /end of while(index <MAX_INDEX)/ /指明该条while语句结束。
} / /end of If(……) / /指明是哪条if语句结束。
说明:调试程序的时候可以方便的使用/*……*/注释掉一长段程序。
说明:JavaDoc工具收集简介的时候使用选取第一句话。
示例:如下是对设置属性的流程注释。
//1.判断输入参数是否有效。
……
//2.设置本地变量
……
示例:这里主要是对闰年算法的说明。
//1.如果能被4整除,是闰年;
//2.如果能被100整除,不是闰年;
//3.如果能被400整除,是闰年;
格式: com.huawei.产品名.模块名称
com.huawei.部门名称.项目名称
示例: 融合WEBSMAP包名 com.huawei.iin.websmap
通用消息转发包名 com.huawei.insa2.msgtrans
示例:OrderInformation,CustomerList,LogManager,LogConfig,SmpTransation
示例: private void calculateRate();
public void addNewOrder();
格式: get+非布尔属性名()
set+ 属性名()
is+布尔属性名()
动词()
动词+宾语()
示例:public String getType();
public boolean isFinished();
public void setVisible(boolean);
public void addKeyListener(Listener);
示例: private customerName;
private orderNumber;
private smpSession;
示例:public final static int MAX_VALUE=1000;
public final static String DEFAULT_START_DATE=“2008-11-06”;
示例:public class Person
{
private String name;
private static List properties;
public void setName(String name)
{
this.name=name;
}
public void setProperties (List properties)
{
Person. Properties= properties;
}
}
示例:Application类型的,命名以App结尾---MainApp;
Frame类型的,建议命名以Frame结尾---TopoFrame;
Panel类型的,建议命名以Panel结尾—CreateCircuitPanel;
Bean类型的,建议命名以Bean结尾---DataAccessBean;
EJB类型的,建议命名以EJB结尾--DBProxyEJB;
Applet类型的,建议命名以Applet结尾---PictureShowApplet;
示例:getCustomerInformation()改为getCustomerInfo()
示例:protected void setUserName()
private void calculateRate()
示例:customes;orderItems
说明:虽然为仅用一两行就可以完成的功能去编写方法好像没有必要,但用方法可使功能明确化,增加程序可读性,亦可方便维护、测试。
说明:对于模块间接口方法参数的合法性检查这一问题,往往有两个极端现象,即:要么是调用者和被调用者对参数均不作合法性检查,结果就遗漏了合法性检查这一必要的处理过程,造成问题隐患,要么就是调用者和被调用者均对参数进行合法性检查,这种情况虽不会造成问题,但产生了冗余代码,降低了效率。
说明:划分类的时候,应该尽量把逻辑处理、数据和显示分离。实现类功能的单一性。
示例:数据类不能包含数组处理的逻辑
通信类不能包含显示处理的逻辑
说明:父类如果实现了比较合理的toString(),子类可以继承不必再重写。
示例: public TopoNode
{
private String nodeName;
public String toString()
{
Return“NodeName:”+nodeName;
}
}
示例:try
{
//……
}
Catch(IOException ioe)
{
//……
}
finally
{
try
{
out.close();
}
catch(IOException ioe)
{
//……
}
}
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.不要显示导入java.lang.*包
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()方法中应该而且必须使用super.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. 不要使用System getenr()方法。
174. 不要硬编码’\n’和’\r’作为换行符号。
175. 不要直接使用java.awt.peer.*里面的接口。
176. 使用System .arraycopy(),不要使用循环来复制数组。
177. 避免不必要的instenceof比较运算和类造型运算。
178. 不要在finalize()方法中删除临听器(listeners)。
179. 在finalize()方法中一定要调用super finalize()方法。
180. 在finalize()方法中的finally中调用super finalize()方法。
181. 进行字符转换的时候应该尽可能的较少用临时变量。
182. 使用Object stream的方法后,调用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. 不要显示导入Java.lang.*包。
206. 初始化时,不要使用类的非静态属性。
207. 显示初始化所有的局部变量。
208. 按照方法名把方法排序放置,同名合同类型的方法应该放在一起。
209. 不要使用嵌套赋值,即在一个表达式中使用多个=。
210. 不要在抽象类的构建器中调用抽象方法。
211. 重载equals()方法的同时,也应该重载hush code()方法。
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()方法必需是public static void main(String[])。
223. 对返回类型为boolean的方法使用is开头,其它类型的不能使用。
224. 对非boolean类型取值方法(getter)使用get开头,其它类型的不能使用。
225. 对于设置值的方法(setter)使用set开头,其它类型不能使用。
226. 方法需要有同样数量参数的注释@param。
227. 不要在注释中使用不支持的标记,如:@unsupported.
228. 不要使用Runtime,exec()方法。
229. 不要自定义本地方法(native method)。
230. 使用尽量简洁的运算符号。
231. 使用集合时设置初始容量。
232. 单个首字符的比较使用charAt()不要使用startsWith()。
233. 对于被除数或者被乘数为2的N次方的乘除运算使用移位运算符>>,<<。
234. 一个字符的连接使用’’而不使用“”,如:String a=b+’c’。
235. 不要在循环体内调用同步方法和使用try-catch块。
236. 不要使用不必要的布尔值比较,如:if(a equals(b)),而不是if(a equals(b)==true)。
237. 常量字符串使用String,非常量字符串使用StringBuffer。
238. 在循环条件判断的时候不要使用复杂的表达式。
239. 对于”if(condition)do1;else do2;”语句使用条件操作符“if(condition)?do1:do2”。
240. 不要在循环体内定义变量。
241. 使用StringBuffer的时候设置初始容量。
242. 尽可能的使用局部变量进行运算。
243. 尽可能少的使用“!”操作符。
244. 尽可能的对接口进行instanceof运算。
245. 不要使用Date[],而要使用long[]替代。
246. 不要显式调用finalize()。
247. 不要使用静态集合,其内存占用增长没有边界。
248. 不要重复调用一个方法获取对象,使用局部变量重用对象。
249. 线程同步中,使用notifyAll()代替notify()
250. 避免在同步方法中不能调用另一个同步方法造成死锁。
251. 非同步方法中不能调用wait(),notify()方法。
252. 使用wait(),notify()代替while(),sheep().
253. 不要使用同步方法,使用同步块(5级)。
254. 把所有的公有方法定义为同步方法(5级)。
255. 实现的Runnable run()方法必须是同步方法(5级)。
256. 一个只有abstract方法final static 属性的类应该定义成接口。
257. 在clone()方法中应该而且必须使用super clone()而不是new.
258. 常量必须定义为final.
259. 在for循环中提供终止条件。
260. 在for,while循环中使用增量计数。
261. 使用String Tokenizer代替indexof()和substring.
262. 不要在构造器中使用非final方法。
263. 不要对参数进行赋值操作。
264. 不要通过名字比较两对象的类,应该使用getclass().
265. 安全:尽量不要使用内部类。
266. 安全:尽量不要使用类可以克隆。
267. 安全:尽量不要使用接口可以序列化。
268. 安全:尽量不要使用友好方法,属性和类。
269. servlet:不要使用Javabeans Beans instantiate()方法。
270. servlet:不要使用Http Session时,应该尽早使用inralidate方法释放.
271. servlet:不要使用JDBC资源时,应该使用close()方法释放.
272. servlet:不要使用servlet的Single Thread Monde,会消耗大量资源。
273. 国际化:不要使用一个字符进行逻辑操作,使用Messag Format
274. 国际化:不要使用Date to String(),Time to String()方法。
275. 国际化:字符和字符串常量应该放在资源文件中
276. 国际化:字符使用数字toString()方法。
277. 国际化:不要使用StringBuffer String Tokenizer类。
278. 国际化:不要使用String 类的compareTo(),equals()方法。
279. 复杂度:建议最大规模:
280. 继承层次 5层
281. 类的行数 1000行(包含{})
282. 类的属性 10个
283. 类的方法 20个
284. 类的友方法 10个
285. 类私有方法 15个
286. 类保护方法 10个
287. 类公有方法 10个
288. 类调用方法 20个
289. 方法参数 5个
290. Return语句 1个
291. 方法行数 30行
292. 方法代码 20
293. 注释比率 30%``50%
原文:http://www.cnblogs.com/julinhuitianxia/p/6804856.html