一 最最最常见的使程序异常的错误
1、空指针异常NPE
说实话这个东西真的很难避免,但又非常的简单。有的时候写着写着从某一个对象中获取某个属性时,我们就会直接get调用,并不会考虑他可能会为空的情况。
原因:
- 与项目的紧急情况有关系,代码写的多了就很容易忽略各种判断。
- 跟编程思想有关系,我觉得NPE的判断应该要刻在每一个Java程序员的思想中,往往一个细节上的失误,可能会造成极大的影响。
- 熟练程度:确实在经验较少的人身上更容易出现。
出现NPE可能的方式:可以在这几个方面多注意一下
- 我觉得是最常出现问题的地方:在引用外部RPC接口时是最容易出现的,我们很容易忽略掉外部RPC接口返回的对象可能为空的情况,一般我们可以通过防腐层代码来解决这个问题。也很好理解,就是在RPC接口外部在包装一层try catch
RPC rpcResponse = new RPC()
try {
//RPC接口调用
rpcResponse = RPC接口调用返回参数;
} catch (Exception e) {
log.error("出现异常打印",e);
}
return rpcResponse;
- 调用其他人写的方法时容易出现,如果这个function可能返回空,但是有没有进行判断的话会出现这样的问题。
- 某些对象中的某些字段可能为空:空字段参与了计算。
- 字段的类型转换:String转各种数字类型,这种一般都是业务异常数据导致的。可以从产品层面或者技术层面进行避免与限制。
- 产品层面:产品需要把控业务上是否会存在数据类型异常的情况。如:String类型的字段是否非数字的其他场景。
- 技术层面:限制字段的类型,如果非此类型就前端提示或者报异常、打印日志等。
二 变量的定义
时刻注意变量定义的范围,能使用临时变量的就不用方法变量;能使用方法变量的就不使用全局变量。这样有助于对象的回收,减少内存泄露和内存溢出的风险。