Java Try Catch NullPointerException

时间:2014-12-15 18:38:34

标签: java arrays

我正在尝试一个关于尝试捕获的例子,但它并不像我想要的那样工作。这是代码:

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区块,但它没有。有任何想法吗?

5 个答案:

答案 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部分。