Java中十个常见的违规编码

摘要:作者Veera Sundar在清理代码工作时发现一些常见的违规编码,因此,Veera Sundar把针对常见的一些违规编码总结成一份列表,以便帮助Java爱好者提高代码的质量和可维护性。

最近,我给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);  

}

原文地址:https://www.cnblogs.com/yuyu666/p/9733895.html

时间: 2024-08-29 19:02:26

Java中十个常见的违规编码的相关文章

Java学习之道:Java中十个常见的违规编码

最近,我给Java项目做了一次代码清理工作.经过清理后,我发现一组常见的违规代码(指不规范的代码并不表示代码错误)重复出现在代码中.因此,我把常见的这些违规编码总结成一份列表,分享给大家以帮助Java爱好者提高代码的质量和可维护性. 这份列表没有依据任何规则或顺序,所有的这些都是通过代码质量工具包括CheckStyle,FindBugs和PMD检查出.一起来看下: 一.Eclipse编译器提供源代码格式输入 Eclipse提供自动源码格式选项,并且组织输入(删除未使用的代码).你可以使用下面的这

java中不常见的keyword:strictfp,transient

1.strictfp, 即 strict float point (精确浮点). strictfp keyword可应用于类.接口或方法.使用 strictfp keyword声明一个方法时,该方法中全部的float和double表达式都严格遵守FP-strict的限制,符合IEEE-754规范.当对一个类或接口使用 strictfp keyword时,该类中的全部代码,包含嵌套类型中的初始设定值和代码,都将严格地进行计算.严格约束意味着全部表达式的结果都必须是 IEEE 754 算法对操作数预

java中IO常见的IO流和file类理论总结

总结的很粗糙,以后时间富裕了好好修改一下. 1:Java语言定义了许多类专门负责各种方式的输入或者输出,这些类都被放在java.io包中.其中,所有输入流类都是抽象类InputStream(字节输入流),或者抽象类Reader(字符输入流)的子类:而所有输出流都是抽象类OutputStream(字节输出流)或者Writer(字符输出流)的子类. [首先需要明白的是:流是干什么的???(为了永久性的保存数据) 根据数据流向的不同分为输入流和输出流: 根据处理数据类型的不同分为字符流和字节流: ]

Java中的常见异常

Java中异常的三种处理方式:面试笔试也常被问 try-catch-finally throw和throws  

Java 中最常见的 5 个错误

在编程时,开发者经常会遭遇各式各样莫名错误.近日,Sushil Das在 Geek On Java上列举了 Java 开发中常见的 5 个错误,与君共「免」. 1.Null 的过度使用 避免过度使用 null 值是一个最佳实践.例如,更好的做法是让方法返回空的 array 或者 collection 而不是 null 值,因为这样可以防止程序抛出 NullPointerException.下面代码片段会从另一个方法获得一个集合: List<String> accountIds = person

Java中最常见的十道面试题

第一,谈谈final, finally, finalize的区别. final?修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承.因此一个类不能既被声明为 abstract的,又被声明为final的.将变量或方法声明为final,可以保证它们在使用中不被改变.被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改.被声明为final的方法也同样只能使用,不能重载 . finally?再异常处理时提供 finally 块来执行

java中图片文件和base64编码的转换

在线图片转base64编码 import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.net.URL; import com.sun.org.apache.xerces.internal.impl.dv.util.Base64; /** * 下载图片并转换成base6

java中不常见的关键字:strictfp

1.strictfp, 即 strict float point (精确浮点). strictfp 关键字可应用于类.接口或方法.使用 strictfp 关键字声明一个方法时,该方法中所有的float和double表达式都严格遵守FP-strict的限制,符合IEEE-754规范.当对一个类或接口 使用 strictfp 关键字时,该类中的所有代码,包括嵌套类型中的初始设定值和代码,都将严格地进行计算.严格约束意味着所有表达式的结果都必须是 IEEE 754 算法对操作数预期的结果,以单精度和双

Java中数组常见的几种排序方法!

数组的定义: int[] arr = new int[5]; int[] arr1 = {1,2,3,4,5}; long[] arr2 = new long[6]; String[] strs = new String[5]; Person[] ps = new Person[5]; 数组的操作: int[] arr = {45, 34, 53, 43}; Arrays.sort(arr); System.out.println(Arrays.toString(arr)); // 二分搜索法(