java编码优化10技巧
2016-07-25 00:00
477 查看
摘要:作者VeeraSundar在清理代码工作时发现一些常见的违规编码,因此,VeeraSundar把针对常见的一些违规编码总结成一份列表,以便帮助Java爱好者提高代码的质量和可维护性。
最近,我给Java项目做了一次代码清理工作。经过清理后,我发现一组常见的违规代码(指不规范的代码并不表示代码错误)重复出现在代码中。因此,我把常见的这些违规编码总结成一份列表,分享给大家以帮助Java爱好者提高代码的质量和可维护性。
这份列表没有依据任何规则或顺序,所有的这些都是通过代码质量工具包括CheckStyle,FindBugs和PMD检查出。一起来看下:
一、Eclipse编译器提供源代码格式输入
Eclipse提供自动源码格式选项,并且组织输入(删除未使用的代码)。你可以使用下面的这些快捷键进行操作。
Ctrl+Shift+F——源代码格式
Ctrl+Shift+O——组织输入并删除未使用的代码
代替手动调用这两个函数,只需根据Eclipse自动格式和自动组织选项,可以随时保存文件。
操作步骤,在Eclipse中进入Window->Preferences->Java->Editor->SaveActions,然后以选定的方式保存,最后检查Formatsourcecode+Organizeimports。
二、避免多个返回(退出点)
依照你的方法,确保只有一个退出点。不要在同一个地方或多个地方使用返回。比如,下面的代码,NOTRECOMMENDED(不建议),这是因为有多个退出点(返回语句)。
privatebooleanisEligible(intage){
if(age>18){
returntrue;
}else{
returnfalse;
}
}
下面的代码有所提升,这是更高版本的。
privatebooleanisEligible(intage){
booleanresult;
if(age>18){
result=true;
}else{
result=false;
}
returnresult;
}
三、简化if-else
我写了几个实用的方法作为参考,检查语句条件并且基于该条件返回值。比如,考虑到isEligible方法,正如你之前所看到的:
privatebooleanisEligible(intage){
booleanresult;
if(age>18){
result=true;
}else{
result=false;
}
returnresult;
}
整个方法以一个单一的return语句重新编写:
privatebooleanisEligible(intage){
returnage>18;
}
四、不要给Boolean,Integer或者String创建新的实例
避免给Boolean,Integer,String创建新的实例。比如,使用newBoolean(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类型标记方法参数,任何时候都适用。这样做的好处在于当你不小心修改参数值时,编译器会给你警告,同时它还能以更好的方式优化编译器代码字节。
建议:
privatebooleanisEligible(finalintage){...}
七、在UPPERCASE中命名publicstaticfinal字段
在UPPERCASE中命名publicstaticfinal字段(通常也被称之为常量)。这个可以让你轻松区分常量字段和局部变量之间的不同。
不建议:
publicstaticfinalStringtestAccountNo="12345678";
建议:
publicstaticfinalStringTEST_ACCOUNT_NO="12345678";,
八、组合成单一的if语句
在尽可能多的情况下,把多个if语句组合成单一的if语句,比如下面的代码:
if(age>18){
if(voted==false){
//eligibletovote.
}
}
合并成单一的if语句:
if(age>18&&!voted){
//eligibletovote
}
九、Switch应该有default
始终给Switch语句添加default。
十、使用常量来避免重复定义相同的字符串值
如果你在多个地方必须使用字符串,那么使用常量来避免重复定义拥有相同值的字符串。
比如,看下面的代码:
privatevoidsomeMethod(){
logger.log("MyApplication"+e);
....
....
logger.log("MyApplication"+f);
}
stringliteral“我的应用”可以作为常量并且能在代码中使用。
publicstaticfinalStringMY_APP="MyApplication";
privatevoidsomeMethod(){
logger.log(MY_APP+e);
....
....
logger.log(MY_APP+f);
}
最近,我给Java项目做了一次代码清理工作。经过清理后,我发现一组常见的违规代码(指不规范的代码并不表示代码错误)重复出现在代码中。因此,我把常见的这些违规编码总结成一份列表,分享给大家以帮助Java爱好者提高代码的质量和可维护性。
这份列表没有依据任何规则或顺序,所有的这些都是通过代码质量工具包括
一、Eclipse编译器提供源代码格式输入
Eclipse提供自动源码格式选项,并且组织输入(删除未使用的代码)。你可以使用下面的这些快捷键进行操作。
Ctrl+Shift+F——源代码格式
Ctrl+Shift+O——组织输入并删除未使用的代码
代替手动调用这两个函数,只需根据Eclipse自动格式和自动组织选项,可以随时保存文件。
操作步骤,在Eclipse中进入Window->Preferences->Java->Editor->SaveActions,然后以选定的方式保存,最后检查Formatsourcecode+Organizeimports。
二、避免多个返回(退出点)
依照你的方法,确保只有一个退出点。不要在同一个地方或多个地方使用返回。比如,下面的代码,NOTRECOMMENDED(不建议),这是因为有多个退出点(返回语句)。
privatebooleanisEligible(intage){
if(age>18){
returntrue;
}else{
returnfalse;
}
}
下面的代码有所提升,这是更高版本的。
privatebooleanisEligible(intage){
booleanresult;
if(age>18){
result=true;
}else{
result=false;
}
returnresult;
}
三、简化if-else
我写了几个实用的方法作为参考,检查语句条件并且基于该条件返回值。比如,考虑到isEligible方法,正如你之前所看到的:
privatebooleanisEligible(intage){
booleanresult;
if(age>18){
result=true;
}else{
result=false;
}
returnresult;
}
整个方法以一个单一的return语句重新编写:
privatebooleanisEligible(intage){
returnage>18;
}
四、不要给Boolean,Integer或者String创建新的实例
避免给Boolean,Integer,String创建新的实例。比如,使用newBoolean(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类型标记方法参数,任何时候都适用。这样做的好处在于当你不小心修改参数值时,编译器会给你警告,同时它还能以更好的方式优化编译器代码字节。
建议:
privatebooleanisEligible(finalintage){...}
七、在UPPERCASE中命名publicstaticfinal字段
在UPPERCASE中命名publicstaticfinal字段(通常也被称之为常量)。这个可以让你轻松区分常量字段和局部变量之间的不同。
不建议:
publicstaticfinalStringtestAccountNo="12345678";
建议:
publicstaticfinalStringTEST_ACCOUNT_NO="12345678";,
八、组合成单一的if语句
在尽可能多的情况下,把多个if语句组合成单一的if语句,比如下面的代码:
if(age>18){
if(voted==false){
//eligibletovote.
}
}
合并成单一的if语句:
if(age>18&&!voted){
//eligibletovote
}
九、Switch应该有default
始终给Switch语句添加default。
十、使用常量来避免重复定义相同的字符串值
如果你在多个地方必须使用字符串,那么使用常量来避免重复定义拥有相同值的字符串。
比如,看下面的代码:
privatevoidsomeMethod(){
logger.log("MyApplication"+e);
....
....
logger.log("MyApplication"+f);
}
stringliteral“我的应用”可以作为常量并且能在代码中使用。
publicstaticfinalStringMY_APP="MyApplication";
privatevoidsomeMethod(){
logger.log(MY_APP+e);
....
....
logger.log(MY_APP+f);
}
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树