[英]Filling an object array in Java
因此,最近(由於受過教育),我從C ++轉到Java,並做了一些練習。 我相信這個問題並不是很聰明,但是我真的需要知道我在做什么錯。
簡單來說,我有3個班級:
我的問題在main()中:
public static void main(String[] args) {
Composer Schubert = new Composer("Franz Schubert", "Classical Music", 6);
Schubert.getConcert()[1].enterWholeConcertData(); //program just crashes here
}
此后什么也沒有,它只會引發此異常:
線程“ main”中的異常java.lang.NullPointerException at amazing_package.mainClass.main(mainClass.java:16)
注意 :如果我直接從Concert類對象調用enterWholeConcertData(),並且它不是它們的數組(像這樣),則一切工作都很好:
Concert concert = new Concert();
concert.enterWholeConcertData();
Composer具有一個字段,該字段是Concert類的數組和一個int變量,用於定義Concert類中的元素數量(加上默認構造函數,另一個setter / getter,“顯示字段”方法,“輸入整個信息”方法):
public class Composer{
Composer(String name, String genre, int aNOC)
{
this.name = name;
this.genre = genre;
this.numberOfConcerts = aNOC;
this.concert = new Concert[numberOfConcerts];
}
private int amountOfSpectators;
private Concert[] concert;
}
參加作曲家音樂會的吸氣劑 :
public Concert[] getConcert()
{
Concert[] copy = new Concert[this.concert.length];
System.arraycopy(this.concert, 0, copy, 0, copy.length);
return copy;
}
Concert由(加上設置器/獲取器,“顯示信息”方法,參數構造器)組成:
public class Concert{
Concert()
{
date = "--.--.----";
amountOfSpectators = 0;
}
private String date;
private int amountOfSpectators;
public void enterWholeConcertData()
{
System.out.println("Enter the date:");
Scanner sDate = new Scanner(System.in);
date = sDate.nextLine();
sDate.close();
System.out.println("Enter the number of spectators: "
+ "");
Scanner sAOW = new Scanner(System.in);
amountOfSpectators = sAOW.nextInt();
sAOW.close();
}
}
抱歉,如果我沒有提到任何重要事項。 您可以向我詢問,我很樂意添加一些新信息。
從我看到的:
public static void main(String[] args) {
Composer Schubert = new Composer("Franz Schubert", "Classical Music", 6);
Schubert.get_concert()[1].enterWholeConcertData(); //program just crashes here
}
您創建一個新的Compser,設置其名稱,流派和NoC。 您還初始化了6個元素的數組。
但是,由於尚未初始化數組或Null中的元素。 您至少應該執行以下操作:
Shuber.get_concert()[1] = new Concert();
在調用方法之前,對於其他任何項目也是如此。
您無需初始化Composer.concert數組的任何單個項目。 在這種情況下, Composer.concert
數組的每個項目都將初始化為null,這就是為什么要獲取NullPointerException
的原因。
引用JLS第4.12.5節:
每個數組組件在創建時都會用默認值初始化
對於所有引用類型,默認值為null
您應該自己初始化Composer.concert
數組的項目。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.