Java 数组上出现空异常

Java 数组上出现空异常,java,arrays,null,setter,getter,Java,Arrays,Null,Setter,Getter,我对Java和编程非常陌生,从事一个类项目,我们正在学习I/o、数组和对象,我们有一些非常具体的指导方针要遵循。当编译器到达“countryInfo[count].setName(name);”时,它会给我 线程“main”java.lang.NullPointerException中出现异常 Main.Main(Main.java:53) 如果我把它注释掉,下一行会给我同样的错误。 我相信有更有效的方法来重新编写代码,但由于我们是新手,我们不允许这样做。在我问之前,我读了很多关于空异常的内容。

我对Java和编程非常陌生,从事一个类项目,我们正在学习I/o、数组和对象,我们有一些非常具体的指导方针要遵循。当编译器到达“countryInfo[count].setName(name);”时,它会给我

线程“main”java.lang.NullPointerException中出现异常 Main.Main(Main.java:53)

如果我把它注释掉,下一行会给我同样的错误。 我相信有更有效的方法来重新编写代码,但由于我们是新手,我们不允许这样做。在我问之前,我读了很多关于空异常的内容。。。如果我错过了什么地方,我道歉。我迷路了:(

}


您从不使用对象填充数组。当前您有一个数组,但它是空的,并且只填充空值。解决方案是在使用之前创建要填充的对象。将数组视为类似于鸡蛋箱。在先填充鸡蛋之前,您不能用鸡蛋箱中的鸡蛋烹饪

    countryInfo[count] = new Country(); // **** add
    countryInfo[count].setName(name);
    countryInfo[count].setCapital(capital);
    countryInfo[count].setRegion(region);
    countryInfo[count].setRegionNum(region_Nbr);
    countryInfo[count].setPopulation(capital_population);
    inputString = br1.readLine();

编辑,您可以声明:

我不确定我是否理解为什么我需要添加这一行,我认为私有静态国家[]国家信息=新国家[43]

创建数组对象(也称为引用类型的数组)时,创建一组空变量,这些变量为任何引用变量的默认值null。这与创建基元类型的数组不同,基元类型的数组会将数组初始化为基元的默认值(整数为0,布尔值为false等)


同样,这类似于创建一个空鸡蛋盒或一个停车场。为了让数组充满对象,你必须自己将对象放入数组。你需要在停车场装满汽车,然后才能选择一辆并开走一辆。仅仅拥有一个有空停车点的停车场对你没有用处

您从不使用对象填充数组。当前您有一个数组,但它是空的,并且只填充空值。解决方案是在使用之前创建要填充的对象。将数组视为类似于鸡蛋箱。在先填充鸡蛋之前,您不能用鸡蛋箱中的鸡蛋烹饪

    countryInfo[count] = new Country(); // **** add
    countryInfo[count].setName(name);
    countryInfo[count].setCapital(capital);
    countryInfo[count].setRegion(region);
    countryInfo[count].setRegionNum(region_Nbr);
    countryInfo[count].setPopulation(capital_population);
    inputString = br1.readLine();

编辑,您可以声明:

我不确定我是否理解为什么我需要添加这一行,我认为私有静态国家[]国家信息=新国家[43]

创建数组对象(也称为引用类型的数组)时,创建一组空变量,这些变量为任何引用变量的默认值null。这与创建基元类型的数组不同,基元类型的数组会将数组初始化为基元的默认值(整数为0,布尔值为false等)

同样,这类似于创建一个空鸡蛋盒或一个停车场。为了让数组充满对象,你必须自己将对象放入数组。你需要在停车场装满汽车,然后才能选择一辆并开走一辆。仅仅拥有一个有空停车点的停车场对你没有用处

您应该添加:

countryInfo[count] = new Country();
以前

countryInfo[count].setName(name);
您应该添加:

countryInfo[count] = new Country();
以前

countryInfo[count].setName(name);

太棒了!谢谢你的帮助。我不太明白为什么我需要添加这行,我想私有静态国家[]countryInfo=新国家[43];也会做同样的事情。很有趣。@user2368407-此语句为43个元素的数组类型
Country
对象分配内存,但不会创建这43个实例。太棒了!感谢您的帮助。我不确定我是否理解为什么需要添加这一行,我认为privatestatic Country[]countryInfo=new Country[43];也会这样做。很有趣。@user2368407-此语句为
Country
对象类型的43个元素数组分配内存,但不创建这43个实例。