Java NSEE是什么意思?还有什么';代码中发生了什么?

Java NSEE是什么意思?还有什么';代码中发生了什么?,java,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(); }

我正在阅读下面的代码,遇到了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”);
}
publicstaticvoid对象数组示例()
{
狗[]狗名单=新狗[10];
//现在有多少狗的物体?
狗名单[5]。吠叫(5);//哦!不
for(int i=0;i
可能是。这里的代码中会出现NullPointerException,因为您从未填充数组

dogList[5].bark(5); //uh oh! NSEE
可能是。这里的代码中会出现NullPointerException,因为您从未填充数组

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

从上下文中我猜
nosuchementException
但在这种情况下,这不是你所能得到的,实际上,您会得到一个
NullPointerException
,因为在Java中,一个非原语类型的新数组中填充了null。

从上下文中,我猜
NoSuchElementException
,但这不是在这种情况下得到的结果,实际上,您会得到一个
NullPointerException
,因为在Java中,一个非原语类型的新数组中填充了null。

NSEE
代表
NoSuchElementException
,但是这个示例是错误的,您会在那里得到一个
NullPointerException

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


教训是,
newdog[10]
实际上并不创建任何
Dog
对象,因此注释中问题的答案是:无
new Dog[10]
只创建一个空数组,10个元素长,能够容纳
Dog
对象。

NSEE
代表
NoTouchElementException
,但是这个例子是错误的,在那里你会得到一个
NullPointerException

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


教训是,
newdog[10]
实际上并不创建任何
Dog
对象,因此注释中问题的答案是:无
new Dog[10]
只创建一个空数组,10个元素长,能够容纳
Dog
对象。

您在这里得到NPE-
NullPointerException
,因为您创建了数组,但尚未填充它。数组仅包含空元素。当您试图访问元素#5的方法时,会得到NPE,因为该元素为null

必须首先初始化元素:


dogList[5]=新狗()

您在此处获得NPE-
NullPointerException
,因为您创建了数组,但尚未填充它。数组仅包含空元素。当您试图访问元素#5的方法时,会得到NPE,因为该元素为null

必须首先初始化元素:


dogList[5]=新狗()

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

如果你移动狗名单[5],吠叫(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”);
Dog[]dogList=新狗[10];
for(int i=0;idogList[i]=new Dog();//因为您只是将数组声明为
Dog[]dogList=new Dog[10];
,并且没有填充数组,所以它应该在检索/使用时给出
NullPointerException
异常(
dogList[5].bark(5);
)声明没有这样的元素

如果在填充阵列后向下移动
狗列表[5]。吠叫(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”);
Dog[]dogList=新狗[10];
for(int i=0;idogList[i]=new Dog();//
NoSuchElementException
枚举
API中的一个例外,在您显示的代码中没有任何跟踪。可能
树皮
方法使用了此API,但无法从您发布的代码中分辨出来


当然,如果您所显示的是应该发生异常的文字代码,那么您的语句就是错误的,因为该代码段不可能产生异常,因为没有
Dog
的实例来调用方法
bark
。该代码可靠地抛出
NullPointerException
>.

NoTouchElementException
枚举
API中的一个例外,在您显示的代码中没有任何跟踪。可能方法
bark
使用了此API,但无法从您发布的代码中分辨出来


当然,如果您所显示的是应该发生异常的文字代码,那么您的语句就是错误的,因为该代码段不可能产生异常,因为没有
Dog
的实例来调用方法
bark
。该代码可靠地抛出
NullPointerException
>因为dogList没有初始化?是的,除了Ian Roberts说的那样,你会得到一个
NullPointerException