2013-08-08 5 views
-2

Java를 처음 사용하고 중첩 클래스 (CenterData)가 포함 된 클래스 (CenterTable)를 구현 중입니다. 둘러싼 클래스 안에서 CenterData 유형의 배열을 만들고 싶습니다. 아래의 코드는 볼 수 있습니다 :Java 중첩 클래스 및 배열 - 스레드 "main"의 예외 java.lang.NullPointerException

CenterTable.centers[1].beam_user = 1; 
System.out.println(CenterTable.centers[1].beam_user); 

나는 오류가 발생 : 스레드 "주요"java.lang의 예외

public class CenterTable { 

public class CenterData { 
     public int userId; 
     public double distance; 
     public double elevation; 
     public int point_00; 
     public int point_01; 
     public int point_10; 
     public int point_11; 

     public CenterData() {  
      userId = 0; 
      distance = 0; 
      elevation = 0; 
      point_00 = 0; 
      point_01 = 0; 
      point_10 = 0; 
      point_11 = 0; 
     } 
    } // end of CenterData class 

public static CenterData[] centers = new CenterData[7064]; 
public static double centerMaxDistance = 0; 
} 

내가 액세스하거나 배열 센터의 요소를 설정하려고 할 때마다. NullPointerException

CenterDataCenterTable 밖으로 이동하고 자신의 Java 클래스에이 문제가 발생하지 않습니다. 어떤 점이 좋을지 모르겠다는 힌트가 있으면이 시점에서 다소 고생합니다.

고맙습니다.

+0

센터는 7064 개의 요소를 포함하며 모두 null입니다. http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html –

답변

2

center[1]에 액세스하려고 했으므로 NullPointerException이 표시되지만 현재는 null을 나타냅니다.

  • 배열을 만들 때 모든 값은 기본값입니다. 참조 유형에 대한
  • 기본값은 모든 객체를 생성하기위한

    CentreTable.centers[1] = new CentreData(); 
    

    첫 번째 개체를 만들 필요가 null

입니다

for(int i = 0; i<= centers.length ; i++){ 

    centers[i] = new CenterData(); 
} 

배열 요소를 참조 후 실제 개체는 다음과 같이 처리 할 수 ​​있습니다.

centers[1].beam_user = 1;  
+0

중첩 된 CenterData를 이동하면 왜 설명 할 수 있습니까? 클래스를 CenterTable에서 자체 Java 클래스로 변환하면 문제가 발생하지 않습니까? – user2665755

+0

작업 코드를 게시하십시오 –

0
public static CenterData[] centers = new CenterData[7064]; 

모든 요소가 null입니다. 배열에 CenterData 인스턴스를 넣어야합니다.

1

CenterData 개체의 배열을 만들었지 만 슬롯 수가 많아서 CenterData을 채울 수 있습니다. 실제로 한 번에 (for 루프 사용) 또는 필요에 따라 (centers[i] == null을 확인하고 필요한 경우 새 것을 작성하여) 생성해야합니다.

+0

CenterTable에서 중첩 된 클래스로 사용하지 않고 CenterData를 자체 Java 클래스에 넣는다면 왜 그 문제가 발생하지 않는지 설명해 주시겠습니까? – user2665755

+0

그 문제는 여전히 발생하며 중첩 된 클래스와 아무 관련이 없습니다. 문제는 배열을 생성하면 객체 묶음에 대한 참조를 유지하기위한 슬롯을 만들고 배열 안에 들어가는 객체를 만들지 않으며 객체를 슬롯에 할당하기 전까지는 'null'입니다. – chrylis

+0

아 알아. 나는 그저 좀 더 놀아 보았습니다. CenterData의 필드를 정적으로 변경하면 각 배열 요소에 대한 인스턴스를 만들 필요가없는 것처럼 보입니다.그 이유가 있을까요? – user2665755