1-关闭资源CloseResource:确保像这个FileInputStream对象这样的资源在使用后关闭。确保FileInputStream、HttpClient等对象在使用后及时关闭。JDK1.8开始推荐使用try-with-resource来关闭资源,因为在捕获多个资源或异常时,try-finally可能会丢失前面的异常,而try-with-resource会保留第一个异常,保存后面的异常是被抑制的异常,可以通过getSuppressed()返回的数组来检查。try-with-resource示例:try(FileReaderfileReader=newFileReader(filePath);BufferedReaderbfReader=newBufferedReader(fileReader)){//dosomething}2-LooseCoupling:避免使用像“ArrayList”这样的实现类型,而是使用接口.避免像“ArrayList”这样的具体实现类型,而是使用它们的接口,例如://这种方法不好:publicArrayListgetList(){ArrayListlist=newArrayList();//dosomethingreturnlist;}//推荐这样使用:publicListgetList(){Listlist=newArrayList();//dosomethingreturnlist;}第二这种写法的好处是即该方法的调用者无需关注方法内部使用了List的具体实现,即使方法内部实现发生变化,调用者也无需修改自己的代码。3-避免捕获NPEAvoidCatchingNPE-避免捕获NullPointerException,考虑消除NPE的原因。程序在运行时抛出NullPointException,说明存在对空指针的解引用,此类问题应该在代码中解决。捕获NullPointException而不处理根本原因是不合适的:1)捕获NullPointException而不是简单的空引用检查会付出更大的性能代价;2)当try块中有多个表达式时有可能抛出NullPointException时,无法正确判断抛出异常的位置;3)抛出NullPointException的程序很少处于正常可用状态。4-使用equals()方法来比较字符串类型UseEqualsToCompareStrings-使用equals()来比较字符串而不是'=='或'!='。使用equals()方法来比较String类型,而不是使用“==”或“!=”。这是为了防止被比较的对象被newString("")构造出来,==比较的是对象的地址,所以要注意这一点。5-使用“==”判断实例是否为nullEqualsNull-避免使用equals()与null进行比较。使用“==”判断实例是否为null,如:str==null,而不是str.equals(null)。6-避免打印堆栈信息AvoidPrintStackTrace-避免printStackTrace(),而是使用记录器调用。避免使用printStackTrace()方法直接打印堆栈,而是使用日志框架打印堆栈信息。7-Integer类型IntegerInstantiation的初始化-避免实例化Integer对象。请改为调用Integer.valueOf()。避免直接通过newInteger(param)创建Integer对象。推荐使用:Integer.valueOf(param)方法创建。如果是String类型参数,建议使用Integer.parseInt()方法解析生成对应的数值类型,效率更高。对于其他类型(如Boolean\Long、Double),修改方法同Integer。8-布尔类型BooleanInstantiation的初始化-避免实例化布尔对象;引用Boolean.TRUE或Boolean.FALSE或改为调用Boolean.valueOf()。避免创建Boolean类型对象,如newBoolean(false),建议使用全局Boolean实例。由于Boolean类型只有1/0两种状态,所以推荐使用Boolean.TRUE或者Boolean.FALSE,或者Boolean.valueOf()。