乐趣区

关于java:Java-代码理解

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() 来应用。

退出移动版