现在做的项目--流程管理系统,在自己负责的模块总是出现程序不健壮的情况,症状表现在空指针异常,程序判断不严谨,所以上网搜集了相关的资料:
可能发生空指针异常的情况
①数据转换的时候,比如String转int、long、或者String、int、long转BigDecimal等
Integer.parseInt(String str)
Long.parseLong(String str)
new BigDecimal(String str)......
在用这些方法前,一定要确定被转换的String对象str有没有是null或""的可能,有的话要处理
②对象强制转换的时候,要考虑对象有没有null的可能
③执行对象的方法的时候,如果对象为null
如:
List list=null;
......--中间一定要有对实例化或进行引用的代码
int size=list.size();--如果list=null,肯定会抛空指针异常
又:
obj.equals("YES"),一定要确定obj不为null,否则抛空指针异常
可以这样写 :"YES".equals(obj),这样是调用对象"YES"的equals方法
以下是 Java 判断字符串是否为空的几种方法.
方法一: 最多人使用的一个方法, 直观, 方便, 但效率很低.
方法二: 比较字符串长度, 效率高, 是我知道的最好一个方法.
方法三: Java SE 6.0 才开始提供的办法, 效率和方法二基本上相等, 但出于兼容性考虑, 推荐使用方法二或方法四.
方法四: 这是种最直观,简便的方法,而且效率也非常的高,与方法二、三的效率差不多
以下代码在我机器上的运行结果: (机器性能不一, 仅供参考)
function 1 use time: 140ms : if (s == null || s.equals(""))
function 2 use time: 47ms :if (s == null || s.length() <= 0)
function 3 use time: 47ms : if (s == null || s.isEmpty())
function 4 use time: 47ms : if (s == null || s == "")
如果是一个List的话,那就先判断是否为null,在判断size是否为0
if(list !=null && list。size != 0)
if(list ==null || list。size == 0)
在调用一个对象的.XX方法之前,要先想一下这个对象会不会是null,
是的话,不会你执行.XX方法,都会报空指针,而且这种和往方法传参传null
是经常由于疏忽导致的最多的。
定义引用的时候,可以初始化的尽量先初始化,以防后来忘记了
一般用字符串的时候都在字符串变量的外面套一层方法
public format(String str){
if(str==null) return "";
else return str.trim();
}
一定要定义变量时候给付给初值,保证判断是否为空