문제

이 질문은 이미 여기에 답이 있습니다.

나는 두 값을 포함하는 클래스 배열을 만들려고 노력했지만 배열에 값을 적용하려고 할 때 NullPointerException을 얻습니다.

public class ResultList {
    public String name;
    public Object value;

    public ResultList() {}
}

.

public class Test {
    public static void main(String[] args){
        ResultList[] boll = new ResultList[5];
        boll[0].name = "iiii";
    }
}

이 오류가 발생하는 이유는 어떻게 고칠 수 있습니까?

도움이 되었습니까?

해결책

배열을 만들었지 만 아무것도 넣지 않았으므로 5 개의 요소가 포함 된 배열이 있습니다. 당신은 추가 할 수 있습니다

boll[0] = new ResultList();

Boll을 설정 한 줄 전에 [0]. 이름.

다른 팁

ResultList[] boll = new ResultList[5];

크기 = 5의 배열을 생성하지만 배열 요소를 생성하지는 않습니다.

각 요소를 인스턴스화해야합니다.

for(int i=0; i< boll.length;i++)
    boll[i] = new ResultList();

나는 전화로 생각합니다

 ResultList[] boll = new ResultList[5];

당신은 5 resultlist를 보유 할 수있는 목록을 만들었습니다. 값을 설정하기 전에 Boll [0]을 초기화해야한다고 생각합니다.

boll[0] = new ResultList();

많은 사람들이 이전 답변에서 말했듯이 ResultList[] boll = new ResultList[5]; 단순히 모든 요소가 널 인 크기 5 인 결과리스트 배열을 만듭니다. 당신이 사용할 때 boll[0].name, 당신은 같은 일을하려고합니다 null.name 이것이 NullPointerException의 원인입니다. 다음 코드를 사용하십시오.

public class Test {
    public static void main(String[] args){
        ResultList[] boll = new ResultList[5];

        for (int i = 0; i < boll.length; i++) {
            boll[i] = new ResultList();
        }

        boll[0].name = "iiii";
   } 
}

여기서 for 루프는 기본적으로 배열의 모든 요소를 ResultList 객체, For 루프가 완료되면 사용할 수 있습니다.

boll[0].name = "iiii";

또한 수업에 디버그 라인을 추가하여 다음과 같은 다음과 같이 스스로 증명할 수 있습니다.

public class ResultList {
    public String name;
    public Object value;

    public ResultList() {
        System.out.println("Creating Class ResultList");
    }
}

객체가 생성 될 때마다 해당 생성자 중 하나를 호출해야합니다 (생성자가없는 경우 기본값은 클래스에 이미 보유한 것과 유사하게 자동으로 생성됩니다). 생성자가 하나만있는 경우 객체를 생성하는 유일한 방법은 해당 생성자를 호출하는 것입니다. 라인 인 경우

ResultList[] boll = new ResultList[5]; 

실제로 5 개의 새로운 객체를 만들었으므로 콘솔에 디버그 라인이 5 번 나타납니다. 그렇지 않은 경우 생성자가 호출되지 않는다는 것을 알고 있습니다. 위의 줄에는 열린 괄호가 열린 매개 변수 목록이 없으므로 "()" "함수 호출 또는 생성자 호출이 아닙니다. 대신, 우리는 유형만을 언급하고 있습니다. 우리는 다음과 같이 말합니다. "저는 총 5 개의 결과리스트 객체를위한 공간이 필요합니다." 이 라인 후에, 당신이 가진 모든 것은 물체가 아닌 빈 공간입니다.

다양한 수정 사항을 시험해 볼 때 디버그 라인은 원하는 것을 얻는 데 도움이됩니다.

ResultList p[] = new ResultList[2];

이 글을 쓰면 2 개의 요소 배열에 대한 공간을 할당합니다. 다음을 수행하여 참조 변수를 초기화해야합니다.

for(int i = 0; i < 2; i++){
    p[i] = new ResultList();
 }
class ResultList {
    public String name;
    public Object value;
    public ResultList() {}
}
 public class Test {
    public static void main(String[] args){
    ResultList[] boll = new ResultList[5];
    boll[0] = new ResultList(); //assign the ResultList objet to that index
    boll[0].name = "iiii";  
   System.out.println(boll[0].name);
   }
 }

resultSet 객체를 만들 때까지 모든 색인이 비어있을 때까지 널 참조를 가리키는 모든 색인이 널을 얻는 이유입니다. 따라서 해당 색인에 객체를 할당 한 다음 값을 설정하십시오.

우선 결과리스트 유형의 5 요소를 만들었지 만 값을 삽입하면 이름과 값이 잘못을 삽입합니다. 생성자를 사용하여 배열 요소에 값을 생성하고 삽입 할 수 있습니다.

class ResultList {
    public String name;
    public Object value;
    public ResultList(String name,Object value){
        this.name = name;
        this.value = value;
        System.out.println(name+" --- "+value);
    }
}
public static void main(String[] args) {
        ResultList[] boll = new ResultList[5];
        boll[0] = new ResultList("myName","myValue");
    }

이 시나리오를 시도하거나 resultList 클래스에서 변수 "이름"정적을 만들 수 있습니다. 따라서 resultList [] boll = new resultList [5]; 그 당시에 실행됩니다. 해당 클래스의 모든 변수는 할당됩니다.

public static void main(String[] args){
         ResultList[] boll = new ResultList[5];
    boll[0] = new ResultList();
    boll[0].name = "iiii";

    System.out.println(boll[0].name);
    }


public class ResultList {

    public  static String name;
    public  Object value;

    public ResultList() {}
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top