我正在尝试一个关于尝试捕获的例子,但它并不像我想要的那样工作。这是代码:
public static void main(String[] args)
{
//This array's size is 5 and it has 4 Strings in it.
String[] array = new String[5];
array[0] = "Hello";
array[1] = "World";
array[2] = "try catch";
array[4] = "error";
try
{
for(int i = 0 ; i<array.length ; i++)
System.out.println("This array has: "+array[i]);
} catch (NullPointerException e)
{
System.out.println("Null!!!");
}
}
输出就是这样:
这个数组有:Hello
此数组包含:World
这个数组有:try catch
此数组具有:null
此数组有:错误
它应该进入catch区块,但它没有。有任何想法吗?
答案 0 :(得分:7)
在NullPointerException
的对象引用上调用方法或尝试访问null
数组时,会发生null
。但这并不是在这里发生的。数组已正确初始化。即使你没有初始化array[3]
,NPE也不会在这里发生。
这里发生的是String conversion (JLS, Section 5.1.11)。
如果引用为null,则将其转换为字符串&#34; null&#34; (四个ASCII字符n,u,l,l)。
null
String
在连接时会转换为String
"null"
,因此不会发生NPE。
答案 1 :(得分:2)
对象数组的元素(除基元之外的所有类型)都初始化为null
。打印null
元素时,会显示字符串文字“null”,如PrintStream#print
使用的System.out.println
下面的代码段所示:
public void print(String s) {
if (s == null) {
s = "null";
}
write(s);
}
请注意,抓住NullPointerException
是一种不好的做法。如果它是一个经过检查的异常,编译器可能会标记该异常永远不会发生。
答案 2 :(得分:0)
它不应该进入&#39; catch&#39;块。 REQUESTING array [i]没有NullPointerException,即使它碰巧保持为null。 如果您尝试对此null执行任何操作,则会出现异常,例如阵列[I] .toLowerCase()
答案 3 :(得分:0)
数组的元素初始化为null。 如果您想获得NullPointerException,请尝试使用像<; p>这样的String方法
array[i].toLowerCase()
答案 4 :(得分:0)
尝试对字符串执行某些操作以创建错误。
执行类似&#39; split(String regex)&#39;这将导致脚本爆炸导致您尝试拆分空值。它会击中你脚本的catch部分。