繁体   English   中英

在线程“主”中获取异常java.lang.NullPointerException

[英]Getting Exception in thread “main” java.lang.NullPointerException

在运行此代码时

public class Main
{
public int a;
public int b;
public static void main(String []args)
{
    Main []ary=new Main[26];
    int i;
    for(i=0;i<26;i++)
    {
        ary[i].a=0;
        ary[i].b=i;
    }
}
}

我收到以下错误。

Exception in thread "main" java.lang.NullPointerException
at Main.main(Main.java:11)

我为同一类创建了一个对象数组,并尝试使用其实例变量

虽然我已经搜索了,但是我找不到错误。

 Main []ary=new Main[26];

您声明array未分配值。

因此,在内存中,数组看起来像Main []ary={null,null ...., null};

NullPointerException

当应用程序在需要对象的情况下尝试使用null时抛出。 这些包括:

  • 调用空对象的实例方法。
  • 访问或修改空对象的字段。
  • 将null的长度视为数组。
  • 访问或修改null插槽,就好像它是一个数组一样。
  • 将null抛出,就好像它是一个Throwable值一样。

就像null.a会导致NullPointerException

 for(i=0;i<26;i++)
    { 
        Main m = new Main();
        m.a =0;
        m.b =i;
        ary[i]= m;

    }
Main []ary=new Main[26];
    int i;
    for(i=0;i<26;i++)
    {
        ary[i]=new Main();
        ary[i].a=0;
        ary[i].b=i;
    }

这将工作:)

您需要为每个数组条目创建一个实例才能访问它:

for(i=0;i<26;i++)
{
    ary[i] = new Main(); // Otherwise ary[i] is null and will cause an exception on the following line
    ary[i].a=0;
    ary[i].b=i;
}

ary [i]为空

public class Main
{
    public int a;

    public int b;

    public static void main( String[] args )
    {
        Main[] ary = new Main[26];
        int i;
        for ( i = 0; i < 26; i++ )
        {
            ary[i]=new Main();//<---(here ary[i] was null)
            ary[i].a = 0;
            ary[i].b = i;
        }
    }
}

您刚刚创建了一个可以容纳Main实例的数组,但是没有初始化内容,因此该数组的所有元素均为null 在分配值之前,先执行ary[i]= new Main()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM