java陣列空指標問題
阿新 • • 發佈:2019-01-06
在java中空指標異常算是一個比較棘手的問題,下面通過一個例子來講解一下怎麼處理空指標,以及出現空指標的問題
比如,我們先建好一個Book類,裡面包括name屬性和bNumber(統計書的總數),並寫出get和set方法。
再寫一個Test類,main方法中用陣列儲存100本書,並設定書的名稱,最後列印書的總數和書的名字。
Book類:
public class Book { private String name; private static int bNumber = 0; public String getName() { return name; } public static int getbNumber() { return bNumber; } public void setName(String name) { this.name = name; } public static void setbNumber(int bNumber) { Book.bNumber = bNumber; } Book(String name) { this.name = name; bNumber += 1; } Book() { bNumber += 1; } }
接下來是Test類,定義一個數組儲存一百本書,我們的第一想法就是Book[] bookname = new Book[100]; 那寫完這些接下來呢,怎麼設定書名,是直接bookname[0].setname("《世界通史》"); ???。。。如果這樣的話,你寫完最後執行的時候會出現一個錯誤:Exception in thread "main" java.lang.NullPointerException。。。。這個就是空指標異常,錯在哪裡了呢。。。
我們可以回到建立陣列的地方,Book[] bookname = new Book[100];,在這裡我們建立的陣列,裡面的100個元素是什麼,是類物件?還是指標。。。答案是指標,100個指向Book類變數的指標,所以我們接下來就要給這100個元素賦值
for(int i=0;i<100;i++)
{
bookname[i] = new Book();
}
這樣,我們就給100個元素(指標)賦了值。。。
那接下來就是賦值給他們書名以及輸出
Test類:
public class Test{ public static void main(String[] args) { Book[] bookname = new Book[100]; for(int i=0;i<100;i++) { bookname[i] = new Book(); } bookname[0].setName("《世界通史》"); bookname[1].setName("《中華上下五千年》"); bookname[2].setName("《明朝那些事兒》"); bookname[3].setName("《深入理解計算機系統》"); for(int i=4;i<100;i++) bookname[i].setName("空"); System.out.println("書籍總數: "+Book.getbNumber()); for(int i=0;i<100;i++) { System.out.println(i + ". " + bookname[i].getName()); } } }
測試結果: