一个引用变量没有通过new分配内存空间,这个对象就是空对象,Java使用关键字null表示空对象。
示例代码如下:
String name = null; name = "Hello World";
引用变量默认值是null。当试图调用一个空对象的实例变量或实例方法时,会抛出空指针异常 NullPointerException,如下代码所示:
String name = null; //输出null字符串 System.out.println(name); //调用length()方法 int len = name.length();
但是代码运行到调用length()方法时,系统会抛出异常。这是因为调用length()方法时,name是空对象。应避免调用空对象的成员变量和方法,代码如下:
//判断对象是否为null if (name != null) { int len = name.length(); }
重点来了
但是Java中空对象调用函数一定会崩溃吗?答案是否定的
直接看例子:
public class TestDemo { public static void func() { System.out.println("This is func()..."); } public static void main(String[]args) { TestDemo tDemo = null; tDemo.func();//放心吧,这行代码不会崩溃的,其实等价于TestDemo.func(); } }
func()是类TestDemo的静态方法,也属于类的成员方法。通常使用类名作为调用者来调用类的静态方法,其实也可以使用类对象来调用类的静态方法,其效果是完全一样的。当使用实例对象调用类的静态方法时,实际上是委托给类来访问调用的,此时即使这个实例对象是空的,它也可以访问到这个静态成员方法,而不发生空指针异常崩溃。但是一般不推荐这样使用,还是用类名称来直接调用类的静态方法吧。