java10大低级错误.docx
- 文档编号:23706534
- 上传时间:2023-05-20
- 格式:DOCX
- 页数:19
- 大小:20.92KB
java10大低级错误.docx
《java10大低级错误.docx》由会员分享,可在线阅读,更多相关《java10大低级错误.docx(19页珍藏版)》请在冰豆网上搜索。
java10大低级错误
Java十大低级错误
1、方法和变量命名随意而不规范,没有类注释、方法注释或注释不规范,代码修改后,不同步修改注释,导致注释与代码不符。
2、数据类不重载toString()方法(说明:
编程规范要求“所有的数据类必须重载toString()方法,返回该类有意义的内容”)。
3、对方法的调用不进行空指针判断而造成空指针异常。
4、数据库操作、IO操作的资源没有及时释放,数据库结果集和连接释放顺序不正确,或者使用没有必要的预处理。
5、循环体内包含了大量没有必要在循环中处理的语句,循环体内循环获取数据库连接,循环体内进行不必要的try-catch操作。
(说明:
编程规范中建议“不要在循环体内调用同步方法和使用try-catch块”)
6、嵌套使用try-catch,或者try-catch后面没有必要的finally操作(说明:
数据库操作、IO操作等需要使用结束close()的对象必须在try-catch-finally的finally中close())。
7、不对数组下标作范围校验。
8、equals操作时没有将常量放在equals操作符的左边(说明:
字符串变量与常量比较时,先写常量,这样可以避免空指针异常)。
9、字符串转化为数字时没有做异常处理。
10、没有在异常分支记录日志导致问题定位困难。
代码案例(说明:
所有样例都是错误的代码):
1.
2.1、方法和变量命名随意而不规范,没有类注释、方法注释或注释不规范,代码修改后,不同步修改注释,导致注释与代码不符。
xml:
namespaceprefix=ons="urn:
schemas-microsoft-com:
office:
office"/>
3.
4.publicclassMethodName
5.{
6. publicvoida(inti)
7. {
8.//错误:
变量名称太短
9.Stringb="";
10.
11.//错误:
变量名称太长,超过40个字符
12.StringlongVariableLongVariableLongVariableLongVariable="";
13.}
14.
15. /**
16. *<一句话功能简述>方法命名约定:
应以小写字母开头、同时命名不应含有下划线字符。
17. *<功能详细描述>
18. *@parami
19. *@see[类、类#方法、类#成员]
20. */
21. publicvoidCheck_Method(inti)
22. {
23. //错误:
方法名称不规范
24.//错误:
变量名称不规范
25.Stringb="";
26. }
27.
28. /**
29. *<一句话功能简述>变量、方法名、类名、接口名避免出现美元字符$。
30. *<功能详细描述>
31. *@parami
32. *@see[类、类#方法、类#成员]
33. */
34. publicvoidFo$o()
35.{
36.//错误:
方法名称不规范
37.}
38.
39. /**
40. *<一句话功能简述>注意hashCode方法大小写。
此规则用于推测作者可能是要实现hashCode方法,但大小写错了。
41. *<功能详细描述>
42. *@return
43. *@see[类、类#方法、类#成员]
44. */
45. publicinthashcode()
46. {
47. //错误:
方法名称不规范
48.inttemp=0;
49. //oops,thisprobablywassupposedtobehashCode
50. returntemp;
51.
52. }
53.
54. /**
55. *
56. *@paramo只有参数类型和返回值类型不一致,方法名equals完全相同(包括大小写也相同),推测可能是想实现equals方法。
57. *@return
58. */
59. publicintequals(Objecto)
60. {
61. //错误:
方法名称不规范
62.//oops,thisprobablywassupposedtobebooleanequals
63. inttemp=0;
64. returntemp;
65. }
66.
67. /**
68. *<一句话功能简述>只有参数类型和返回值类型不一致,方法名equals完全相同(包括大小写也相同),推测可能是想实现equals方法。
69. *<功能详细描述>
70. *@params
71. *@return
72. *@see[类、类#方法、类#成员]
73. */
74. publicbooleanequals(Strings)
75. {
76. //错误:
方法名称不规范
77.//oops,thisprobablywassupposedtobeequals(Object)
78. returntrue;
79. }
80.
81. /**
82. *<一句话功能简述>'getX()'方法同时返回值又是'boolean',则建议用'isX()'命名。
checkParameterizedMethods属性用于决定是否对带参数的方法检测。
83. *<功能详细描述>
84. *@return
85. *@see[类、类#方法、类#成员]
86. */
87. publicbooleangetFoo()
88. {
89. //错误:
方法名称不规范
90.//bad
91. returntrue;
92. }
93.
94.}
95.
96.
97.2、数据类不重载toString()方法(说明:
编程规范要求“所有的数据类必须重载toString()方法,返回该类有意义的内容”)。
98.publicclassContentextendsBaseMetaData
99.{
100. privateStringoldCID;
101.
102. privateStringcId;
103.
104. privateStringspId;
105.
106. privateinttype;
107.
108.privateintserviceType;
109..........................
110. /**
111. *设置修改标识
112. *@paramupdate_flag修改标识
113. */
114. publicvoidsetUpdate_flag(Stringupdate_flag)
115. {
116. this.updateFlg=update_flag;
117.
118. }
119. publicvoidsetVersion(Stringversion)
120. {
121. this.version=version;
122.}
123.publicStringtoString()
124. {
125. //没有重载toString方法或者重载无意义的toString方法
126.returnnull;
127.}
128.}
129.
130.3、对方法的调用不进行空指针判断而造成空指针异常。
131./**
132.*<一句话功能简述>演示不进行空指针判断造成空指针异常
133.*<功能详细描述>
134.*
135.*@see [相关类/方法]
136.*@since [产品/模块版本]
137.*/
138.publicclassNullPoint
139.{
140.
141. /**
142. *<一句话功能简述>
143. *<功能详细描述>
144. *@return
145. *@see[类、类#方法、类#成员]
146. */
147. publicStringreturnNull()
148. {
149. Stringtemp=null;
150. returntemp;
151. }
152.
153. publicvoidcheckNull()
154. {
155. Stringstr1="aa";
156.
157. //错误:
没有对returnNull()的值进行为空判断,会造成空指针
158.if(str1.equals(returnNull()))
159. {
160. str1=returnNull();
161. }
162. print(str1);
163.
164. }
165.
166. publicvoidprint(Stringstr)
167. {
168. }
169.}
170.
171.
172.
173.4、数据库操作、IO操作的资源没有及时释放,数据库结果集和连接释放顺序不正确,或者使用没有必要的预处理。
174./**
175.*<一句话功能简述>该类用来演示没有释放资源的的错误
176.*<功能详细描述>
177.*@see [相关类/方法]
178.*@since [产品/模块版本]
179.*/
180.publicclassReleaseRes
181.{
182. publicvoidreleaseDB()
183. {
184. Connectionconn=null;
185. APLResultSetrs=null;
186. Stringsql="";
187. try
188. {
189. conn=DB.getConnection();
190.
191. rs=DB.query(sql);
192. if(rs.next())
193. {
194. returnrs.getString("currentdate");
195. }
196. else
197. {
198. returnDateTool.getCurrentDate(pattern);
199. }
200.
201.//错误:
连接没有在finally正确释放,会出现异常时导致在运行一段时间后,系统由于连接池满载而崩溃。
202. }
203. catch(DBExceptione)
204. {
205. ...................
206. }finally{
207.
208.}
209. //错误:
资源APLResultSet没有正确释放
210.}
211. /**
212. *<一句话功能简述>
213. *<功能详细描述>
214. *@paramfile
215. *@see[类、类#方法、类#成员]
216. */
217. publicvoidreleaseIO(Filefile)
218. {
219. StringBuffersb=null;
220. BufferedReaderin=null;
221. try
222. {
223. in=newBufferedReader(newFileReader(file));
224.
225. sb=newStringBuffer();
226. for(Stringline;(line=in.readLine())!
=null;)
227. {
228. sb.append(line+"\r\n");
229. }
230. }
231. catch(IOExceptionex)
232. {
233. Throwex;
234. }
235. //错误:
IO资源没有正确释放,需要在finally中释放资源
236. }
237.
238.
239.
240.
241.5、循环体内包含了大量没有必要在循环中处理的语句,循环体内循环获取数据库连接,循环体内进行不必要的try-catch操作。
(说明:
编程规范中建议“不要在循环体内调用同步方法和使用try-catch块”)
242./**
243.*<一句话功能简述>该类用来演示循环中的错误
244.*<功能详细描述>
245.*@see [相关类/方法]
246.*@since [产品/模块版本]
247.*/
248.publicclassCheckCycle
249.{
250. publicvoidcycleInfo()
251. {
252. String[]Str=null;
253.
254. //获取各个部件的通知地址
255. Str=outNotify.getResult();
256. StringBuffersb=null;
257. BufferedReaderin=null;
258.
259. Connectionconn=null;
260. APLResultSetrs=null;
261. Stringsql="";
262. Filefile=null;
263.
264. for(inti=0;i 265. { 266. //错误: 判断完全可以在for外部进行而不是在内内部。 267. if(null! =Str) 268. { 269. System.out.print(Str[i]); 270. } 271. 272. //错误: 不要在循环中获取数据库连接。 273. conn=DB.getConnection(); 274. 275. //错误: 循环体内进行无必要的try-catch操作,完全可以放在循环外边。 276. try 277. { 278. //错误: 不要在循环中获取IO连接。 279. in=newBufferedReader(newFileReader(file)); 280. 281. sb=newStringBuffer(); 282. 283. } 284. catch(IOExceptionex) 285. { 286. Throwex; 287. } 288. } 289. } 290.} 291. 292.6、嵌套使用try-catch,或者try-catch后面没有必要的finally操作(说明: 数据库操作、IO操作等需要使用结束close()的对象必须在try-catch-finally的finally中close())。 293./** 294.*<一句话功能简述>演示嵌套循环的错误 295.*<功能详细描述> 296.*@see [相关类/方法] 297.*@since [产品/模块版本] 298.*/ 299.publicclassNestingTry 300.{ 301. /** 302. *<一句话功能简述> 303. *<功能详细描述> 304. *@see[类、类#方法、类#成员] 305. */ 306. publicvoidcheckTry() 307. { 308. StringBuffersb=null; 309. BufferedReaderin=null; 310.Filefile=null; 311. try 312. { 313. initFtpClient(this.ftpClient,getFtpServConfig()); 314. //把绝对路径加入到文件中 315. String[]absoluteFilesnull; 316. 317. //错误: 完全没有必要在内容进行异常处理,而应该将异常处理放在try块后面进行处理。 318. try 319. { 320. absoluteFiles=addAbsolutePath(this.ftpClient,files); 321. } 322. Catch(IOExceptionex) 323. { 324. Throwex; 325. } 326.Filefile=null; 327. in=newBufferedReader(newFileReader(file)); 328. sb=newStringBuffer(); 329. } 330. catch(Exceptione) 331. { 332. thrownewFtpOperationsException(FtpConst.Ftp_Operations_Del_Error, 333. "IOExceptionwheninvokingdeleteFilesmethod",e); 334. } 335. //错误: IO资源没有正确释放,必须有finally进行释放资源 336. } 337.} 338. 339.7、不对数组下标作范围校验。 340./** 341.*<一句话功能简述>该类用来演示数据下标越界 342.*<功能详细描述> 343.*@see [相关类/方法] 344.*@since [产品/模块版本] 345.*/ 346.publicclassArrayOver 347.{ 348. publicvoidcheckArray() 349. { 350. //获取一个数组对象 351. String[]cIds=ContentService.queryByName(name); 352. 353. if(null! =cIds) 354. { 355. //错误: 只是考虑到cids有可能为null的情况,但是cids完全有可能是个0长度的数组,因此cIds[0]有可能数组下标越界。 356. Stringcid=cIds[0]; 357. 358. } 359. 360. } 361.} 362. 363. 364.8、equals操作时没有将常量放在equals操作符的左边(说明: 字符串变量与常量比较时,先写常量,这样可以避免空指针异常)。 365. /** 366. *定义常量 367. */ 368. publicsta
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java10 低级 错误