java.lang.NullPointerException 可以说是最臭名昭著的异常了,但造成它的根源却是来自Null。在Java中Null被用来表示一个不存在或者值为空的对象。理论上在使用任何一个引用的对象前应该 instance == null 的判断,以确保对象存在或者值不为空。实际上程序员常常忘记这样做,于是NullPointerException就经常出现。
上帝创造了男人,多年之后他老人家后悔了!
多年以后,Null的发明者Sir Charles Antony Richard Hoare同样发出这样的忏悔,他称这个是造成上亿美元损失的错误!要知道他可不是一个”糟糕“的程序员,除了发明Null,他还发明了快速排序算法。
当null可以被用来一个不存在的东西时,我们不得不花更多的努力来确保程序不会抛出NullPointerExcepiton,其实常用的方法之一是:
if(player != null){
player.play();
}
这是最为常见的一种,但我相信你会和我一样,对这样的代码感到不适和无奈! 你可能想到用Null Object 模式,该模式意图在于用一个特殊的对象而非Null来表示一个值为空,这个值为空对象和普通对象拥有相同的接口, 因此就可以避免到处去判断是否为空值。但为此付出的代价是我们每个可能为空的类型定义一个为空值时的类型,如:
public interface Animal {
pu