1 – 敞开资源
CloseResource: Ensure that resources like this FileInputStream object are closed after use.
确保 FileInputStream、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 异样而不对根本原因进行解决是不适合的:
1)捕捉 NullPointException 而不是作简略的空援用查看,在性能上要付出更大的代价;
2)当 try 程序段中多个表达式都有可能抛出 NullPointException 时,无奈正确判断异样的抛出地位;
3)程序抛出 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 类型的初始化
IntegerInstantiation – 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() 来应用。