3

mainMethod.java

public class mainMethod{
    public animalsData[] animals;

    public mainMethod(){
        animals[this.animals.length + 1] = new animalsData("CAT", "4");

    }

    public static void main(String[] args) {
        mainMethod run = new mainMethod();
    }
}

animalsData.java

public class animalsData{
    String name, l;

    public animalsData(String name, String l) {
        super();
        this.name= name;
        this.l= l;
    }
}

I hava this problem: Exception in thread "main" java.lang.NullPointerException

4

3 に答える 3

6

クラスanimalsで配列を初期化することはありません。mainMethod

あなたのpublic mainMethod()方法では、あなたはする必要がありますanimals = new animalsData[INITIAL SIZE];

自動的に拡張する場合は、を使用する必要がありますListthis.animals.length + 1それでも、そのインデックスとしては使用しません。あなたは単にするだろうList.add()

于 2012-08-31T17:42:22.680 に答える
4
public List<animalsData> animals = new ArrayList<animalsData>()

public mainMethod(){
    animals.add(new animalsData("CAT", "4"));
}

Javaのリストの詳細については、配列はデフォルトでは拡張できません。また、配列の最後のアイテムの後にアイテムを追加した場合、その次元を超えて拡張することはできません。

于 2012-08-31T17:42:52.287 に答える
1

1. そのときArray に初期化する必要がありますdeclared

例えば:

public animalsData[] animals; 


    public static void main(String[] args) {
        mainMethod run = new mainMethod();
        System.out.println(run.animals.length);
    }

上記のコードは、がNullであり、ヒープに割り当てられていない原因NullPointerExceptionを示します。animalsObject Reference Array VariableArray Object

public animalsData[] animals = new animalsData[10]; 


        public static void main(String[] args) {
            mainMethod run = new mainMethod();
            System.out.println(run.animals.length);
        }

上記のコードは正常に機能します....アレイが初期化されたためです。

配列の代わりに使用することをお勧めしますjava.util.Collections。配列は非常に柔軟性があります。

List<animalsData> animals = new ArrayList<animalsData>();

于 2012-08-31T17:49:25.530 に答える