为空或抛出异常
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"
}
}
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"
}
}