为空或抛出异常

Null or throw exception

public class Learner {
    public static void main(String[] args) {
        String[] dataArr = new String[4];
        dataArr[1] = "Bill";
        dataArr[2] = "Steve";
        dataArr[3] = "Larry";
        try{
            for(String data : dataArr){
                System.out.print(data+" ");
            }
        }catch(Exception e){
            System.out.println(e.getClass());
        }
    }
}

书上说这将打印: null 比尔·史蒂夫·拉里

这让我感到困惑,因为我认为使用 null 访问任何数据都会抛出 NullPointerException。访问具有空值的数组时是否会抛出异常?

或者是system.out.println(),救命之恩?只要你不说调用 data.length() 就可以使用 for 循环访问任何空值吗?

所以它正在打印出对象的值,在这种情况下该值将为 null。

如果您尝试使用它的函数或访问任何属性,则会发生空指针异常,因为这些属性尚不存在,因此会出现空指针异常。

字符串连接在 JLS 中被定义为 safe 操作,当操作数是空引用时,即它不会抛出任何异常(如果它会是这种情况试图用 .toString()) 描述对象,必须使用文本 "null"

安全检查是不是 运行当需要拆箱时:

Integer val = null;
int err = val + 1; // throws NPE

出于好奇,访问空引用上的任何静态方法甚至不需要检查,因为绑定发生在编译时:

public class NullRefStatic {

    public static void test() { // <-- static method
        System.out.println("It works");
    }

    public static void main(String... args) {
        NullRefStatic target = null;
        target.test(); // <-- Prints "It works"
    }
}