2015-06-13 60 views
-1

嘿,有人可以幫我理解爲什麼我一直試圖運行這個時候得到一個空指針異常? 我只是想學習我正在參加的課程的數據列表。ArrayList返回NullPointer異常|| Java || OOP

////////////////////////

public class Address { 
    int houseNumber; 
    String roadNumber; 
    String areaName; 
    String cityName; 


public Address(int hn, String rn, String an, String cn){ 
    this.houseNumber = hn; 
    this.roadNumber = rn; 
    this.areaName = an; 
    this.cityName = cn; 
} 


public String toString() { 
    return "House # " + this.houseNumber + "\nRoad # " + this.roadNumber + "\n" + this.areaName + "\n" + this.cityName; 
} 



} 

///////////////////////// ////

import java.util.ArrayList; 

public class AddressReferences { 

ArrayList<Address> myCollection = new ArrayList<Address>(); 


public void addAddress (int hn, String rn, String an, String cn) { 
    myCollection.add(new Address(hn,rn,an,cn)); 
} 

public void printAddress() { 
    for (Address i : myCollection){ 
     System.out.println (i); 


    } 
} 
} 

//////////////////////////////////////

public class Test { 

static AddressReferences ar; 


public static void main(String[] args){ 

    ar.addAddress(46, "9/a", "Kotol", "Dhaka"); 
    ar.addAddress(44, "9/a", "Kotol", "Dhaka"); 
    ar.addAddress(28, "9/a", "Kotol", "Dhaka"); 
    ar.addAddress(89, "12/a", "Kotol", "Dhaka"); 
    ar.addAddress(60, "7/a", "Kotol", "Dhaka"); 


    ar.printAddress(); 





} 
} 
+2

您還沒有初始化任何東西。當你輸入你的主要方法時它是空的。 – swingMan

回答

3

字段(實例字段或靜態字段)被初始化爲th的「all bits off」版本他們能夠擁有的一種價值;對於對象引用,這是null。您的ar靜態字段從null開始,並且您從不向其分配任何內容。因此,ar.addAddress(...)將拋出一個NPE,因爲arnull

要修復它,使用ar任何東西前加

ar = new AddressReferences(); 

...到main

0

這裏的零點異常並不意味着myCollection爲空,這意味着ar爲空,因此將ar = new AddressReferences();添加到您的主函數中。

public static void main(String[] args){ 

    ar = new AddressReferences(); 

    ar.addAddress(46, "9/a", "Kotol", "Dhaka"); 
    ar.addAddress(44, "9/a", "Kotol", "Dhaka"); 
    ar.addAddress(28, "9/a", "Kotol", "Dhaka"); 
    ar.addAddress(89, "12/a", "Kotol", "Dhaka"); 
    ar.addAddress(60, "7/a", "Kotol", "Dhaka"); 

    ar.printAddress(); 

}