在Java语言在,null被分配给一个对象的引用以表示对象指向未知数据块。当应用程序使用或访问一个指向null的引用,会被抛出。
下列情况会抛出NullPointerException 。
- 调用null对象的方法。
- 访问或修改null对象的域。
- 如果null是一个数组,并获取null的长度。
- 如果null对象是一个对象数组,并访问会修改null对象的子元素。
- 如果对象是一个 Throwable值,并抛出null。
- 试图对null对象同步。
NullPointerException 是一个 RuntimeException ,Javac编译器不会强制你使用try-catch块来处理该异常。
为什么我们需要null值?
如前所述,null是一个Java中的特殊值。null在编写一些设计模式时非常有用。例如Null对象模式[1] 与单例模式。Null对象模式提供一个对象作为缺少给定类型对象的代理。单例模式确保只有一个类的实例被创建,并且提供一个对象的全局访问点。
例如,至多创建类的一个实例的一种简单的方法是声明类的所有构造函数给私有类型,并创建一个公共方法,该方法返回这个类的唯一实例。
TestSingleton.java:
import java.util.UUID;
class Singleton {
private static Singleton single = null;
private String ID = null;
private Singleton() {
/* Make it private, in order to prevent the creation of new instances of
* the Singleton class. */
ID = UUID.randomUUID().toString(); // Create a random ID.
}
public static Singleton getInstance() {
if (single == null)
single = new Singleton();
return single;
}
public String getID() {
return this.ID;