您的位置 首页 java

你的 Java 代码有这些坏味道吗?

列举一些 Java 开发中常见的“不良实践”,来源于代码扫描(),和诸君一起学习参考:

1 – 关闭资源

CloseResource: Ensure that resources like this FileInputStream object are closed after use.

确保 File InputStream、HttpClient 之类的对象在使用后被及时关闭。

JDK 1.8 开始建议使用 try-with-resource 关闭资源 ,因为对于多个资源或异常的捕获中,try-finally 可能丢失掉前面的异常,而 try-with-resource 会保留第一个异常,并把后续的异常作为Suppressed exceptions,可通过 getSuppressed() 返回的数组来检验。

try-with-resource 示例:

 try (FileReader fileReader = new FileReader(filePath);
    BufferedReader bfReader = new BufferedReader(fileReader)) {
    // do something
}
  

2 – 松耦合

LooseCoupling: Avoid using implementation types like ‘ArrayList’, use the interface instead.

避免使用具体的实现类型,比如“ArrayList”,而是使用它们的接口,比如:

 // 这种方法不好:
public ArrayList<String> getList() {
    ArrayList<String> list = new ArrayList<String>();
    // do something
    return list;
}

// 建议这样用:
public List<String> getList() {
    List<String> list = new ArrayList<String>();
    // do something
    return list;
}
  

第二种写法的优点是,这个方法的调用者不必关注方法内部到底使用了哪个 List<String> 的具体实现,并且就算方法内部的实现发生了变化,调用方也不需要修改自己的代码。

3 – 避免捕获NPE

AvoidCatchingNPE – Avoid catching NullPointerException, consider removing the cause of the NPE.

避免捕获空指针异常,考虑删除相关的捕获语句,并在代码中进行空引用的检查。

程序在运行期抛出 NullPointException 异常,表明存在一个对空指针的解引用,这类问题应该在代码中解决。

通过捕获 NullPointException 异常而不对根本原因进行处理是不合适的:

4 – 使用 equals() 方法来比较 String 类型

UseEqualsToCompareStrings – Use equals() to compare strings instead of ‘==’ or ‘!=’.

使用 equals() 方法对 String 类型进行比较,而不是用 “==” 或 “!=”。

这是为了防止比较的对象是通过 new String(“”) 构造的,== 比较的是对象的地址,要注意这点。

5 – 使用 “==” 判断实例是否为 null

EqualsNull – Avoid using equals() to compare against null.

使用 “==” 判断实例是否为 null ,如: str == null ,而不是 str.equals(null)

6 – 避免打印堆栈信息

AvoidPrintStackTrace – Avoid printStackTrace(), use a logger call instead.

避免使用 printStackTrace() 方法直接打印堆栈,而是要使用日志框架打印堆栈信息。

7 – Integer 类型的初始化

Integer Instantiation – Avoid instantiating Integer objects. Call Integer.valueOf() instead.

避免通过 new Integer(param) 直接创造 Integer 对象,推荐用: Integer.valueOf(param) 的方法来创建。

如果是 String 类型的参数,推荐用 Integer.parseInt() 方法,解析生成对应的数值类型,更高效。

其他类型(比如 Boolean Long、 Double)的解析,修改方式和 Integer 相同。

8 – Boolean 类型的初始化

BooleanInstantiation – Avoid instantiating Boolean objects; reference Boolean.TRUE or Boolean.FALSE or call Boolean.valueOf() instead.

避免创建 Bool 类型的对象,比如 new Boolean(false) ,建议使用全局的 Boolean 实例。

由于 Boolean 类型就只有 1 / 0 两种状态,因此建议通过 Boolean.TRUE Boolean.FALSE ,或 Boolean.valueOf() 来使用。

参考资料

作者:瘦风

出处:

文章来源:智云一二三科技

文章标题:你的 Java 代码有这些坏味道吗?

文章地址:https://www.zhihuclub.com/189086.shtml

关于作者: 智云科技

热门文章

网站地图