NSEE是什么意思?以及这段代码中发生了什么?

时间:2012-10-29 16:39:31

标签: java

我正在阅读以下代码,并遇到了NSEE。这是什么意思?以下代码块试图演示什么?

public static void objectArrayExamples()
{
Dog[] dogList = new Dog[10];
// How many Dog objects now exist?
dogList[5].bark(5); //uh oh! NSEE
for(int i = 0; i < dogList.length; i++)
{
dogList[i] = new Dog();
}
dogList[3].setName(“Bowzer”);
}

6 个答案:

答案 0 :(得分:4)

从上下文我猜NoSuchElementException,但这不是你在这种情况下得到的,你实际上得到一个NullPointerException因为在Java中一个新的非基本类型的数组是充满了空白。

答案 1 :(得分:2)

NSEE代表NoSuchElementException,但是示例有误,你在那里得到NullPointerException

它试图展示的是一个很好的问题,我的猜测是它试图证明初始化数组本身和初始化该数组元素之间的区别。

教训是new Dog[10]实际上并没有创建任何Dog个对象,因此评论中问题的答案是:none。 new Dog[10]只创建一个空数组,长10个元素,能够保存Dog个对象。

答案 2 :(得分:1)

可能是NoSuchElementException。你会在你的代码中得到NullPointerException,因为你从未填充过你的数组。

dogList[5].bark(5); //uh oh! NSEE

答案 3 :(得分:0)

你在这里获得NPE - NullPointerException,因为你创建了数组但没有填充它。您的数组仅包含null元素。当您尝试访问元素#5的方法时,您将获得NPE,因为该元素为空。

您必须先初始化元素:

dogList[5] = new Dog();

答案 4 :(得分:0)

由于您只是将数组声明为Dog[] dogList = new Dog[10];,而不是填充数组,因此它应该在检索/使用(NullPointerException)上给出dogList[5].bark(5);异常,说明没有这样的元素

如果在填充阵列后移动dogList[5].bark(5);,则应该是好的,例如:

    Dog[] dogList = new Dog[10];
    for(int i = 0; i < dogList.length; i++)
    {
      dogList[i] = new Dog(); //<- Your array is populated here
    }
    dogList[5].bark(5); //<-- Your statement can be moved here
    dogList[3].setName(“Bowzer”);

答案 5 :(得分:0)

NoSuchElementExceptionEnumeration API的一个例外,在您显示的代码中没有跟踪。也许方法bark使用此API,但是从您发布的代码中无法判断。

当然,如果你所显示的是应该发生异常的文字代码,那么你的语句就是假的,因为这段代码不可能产生异常,因为没有Dog的实例打开方法bark。此代码可靠地抛出NullPointerException