近期,我给Java项目做了一次代码清理工作。经过清理后,我发现一组常见的违规代码(指不规范的代码并不表示代码错误)反复出如今代码中。因此,我把常见的这些违规编码总结成一份列表,分享给大家以帮助Java爱好者提高代码的质量和可维护性。
这份列表没有根据不论什么规则或顺序,全部的这些都是通过代码质量工具包含CheckStyle,FindBugs和PMD检查出。一起来看下:
一、Eclipse编译器提供源码格式输入
Eclipse提供自己主动源代码格式选项,而且组织输入(删除未使用的代码)。你能够使用以下的这些快捷键进行操作。
Ctrl + Shift + F——源码格式
Ctrl + Shift + O——组织输入并删除未使用的代码
取代手动调用这两个函数,仅仅需依据Eclipse自己主动格式和自己主动组织选项,能够随时保存文件。
操作步骤,在Eclipse中进入Window -> Preferences -> Java -> Editor -> Save Actions,然后以选定的方式保存,最后检查Format source code + Organize imports。
二、避免多个返回(退出点)
按照你的方法,确保仅仅有一个退出点。不要在同一个地方或多个地方使用返回。比方,以下的代码,NOT RECOMMENDED(不建议),这是由于有多个退出点(返回语句)。
- private boolean isEligible(int age){
- if(age > 18){
- return true;
- }else{
- return false;
- }
- }
以下的代码有所提升,这是更高版本号的。
- private boolean isEligible(int age){
- boolean result;
- if(age > 18){
- result = true;
- }else{
- result = false;
- }
- return result;
- }
三、简化if-else
我写了几个有用的方法作为參考,检查语句条件而且基于该条件返回值。比方,考虑到isEligible方法,正如你之前所示:
- private boolean isEligible(int age){
- boolean result;
- if(age > 18){
- result = true;
- }else{
- result = false;
- }
- return result;
- }
整个方法以一个单一的return语句又一次编写:
- private boolean isEligible(int age){
- return age > 18;
- }
四、不要给Boolean, Integer或者String创建新的实例
避免给Boolean,Integer,String创建新的实例。比方,使用new Boolean(true),Boolean,valueOf(true)。改动后的语句与之前的效果基本同样,除了在性能上有所提升。
五、使用大括号模块语句
永远别忘了使用大括号模块语句比方if、for、while。这样做的优点是当你在改动模块级语句时降低了模糊代码而且避免引进bug的机会。
不建议:
- if(age > 18)
- result = true;
- else
- result = false;
建议:
- if(age > 18){
- result = true;
- }else{
- result = false;
- }
六、以final类型标记方法參数,不论什么时候都适用
请记住,以final类型标记方法參数,不论什么时候都适用。这样做的优点在于当你不小心改动參数值时,编译器会给你警告,同一时候它还能以更好的方式优化编译器代码字节。
建议:
- private boolean isEligible(final int age){ ... }
七、在UPPERCASE中命名public static final字段
在UPPERCASE中命名public static final字段(通常也被称之为常量)。这个能够让你轻松区分常量字段和局部变量之间的不同。
不建议:
- public static final String testAccountNo = "12345678";
建议:
- public static final String TEST_ACCOUNT_NO = "12345678";,
八、组合成单一的if语句
在尽可能多的情况下,把多个if语句组合成单一的if语句,比方以下的代码:
- if(age > 18){
- if( voted == false){
- // eligible to vote.
- }
- }
合并成单一的if语句:
- if(age > 18 && !voted){
- // eligible to vote
- }
九、Switch应该有default
始终给Switch语句加入default。
十、使用常量来避免反复定义同样的字符串值
假设你在多个地方必须使用字符串,那么使用常量来避免反复定义拥有同样值的字符串。
比方,看以下的代码:
- private void someMethod(){
- logger.log("My Application" + e);
- ....
- ....
- logger.log("My Application" + f);
- }
string literal“我的应用”能够作为常量而且能在代码中使用。
- public static final String MY_APP = "My Application";
- private void someMethod(){
- logger.log(MY_APP + e);
- ....
- ....
- logger.log(MY_APP + f);
- }