經常會遇見java.lang.NullPointerExcetion 的錯誤,典型的一個錯誤例子,供大家參考

在練習泛型的時候碰到的一個小問題

package com.action;

import java.util.ArrayList;
import java.util.List;

public class FanXingClass<T>{

    /**
     * @param args
     */
    private T user1;
    private T user2;
    //private ArrayList<T> list;
    public FanXingClass(T user1,T user2){
        this.user1 = user1;
        this.user2 = user2;
    }
    public List<T> getList(){
        List<T> list = new ArrayList<T>();
        list.add(user1);
        list.add(user2);
        return list;
    }
    public static void main(String[] args) {
        User user1 = new User("user1","密碼1",20);
        User user2 = new User("user2","密碼2",20);
        FanXingClass<User> fx = new FanXingClass<User>(user1,user2);

        List<User> list = fx.getList();
        System.out.println("The size of list: " + list.size());
        System.out.println("泛型類的類名: " + fx.user1.getClass().getName() + "\n");
        for(User user:list){
            System.out.println("名字: " + user.getName() + ", 密碼: " + user.getPassword() + ", 年齡: " + user.getAge());
        }
    }

}

在上面的簡單代碼中,其中User是一個簡單的Bean類(三個屬性值);上述代碼運行不會有任何問題,出現的結果爲右邊的圖所示的結果!
這裏寫圖片描述

但是,如果將//private ArrayList list; 取消註釋,而getList()方法中的List list = new ArrayList();加上註釋,就會出現空指針的異常
這裏寫圖片描述

分析:
其實,看到這個錯誤就應該明白是哪裏出問題,空指針異常:很顯然是某個類沒有被創建,不存在對應的實例對象(一般情況,不是所有的這個錯誤都是這個原因)。

後來找到兩種解決辦法:
第一種方法:就是上面所說的在getList()方法中新建一個List list = new ArrayList();的實例,當然這裏是局部變量。
第二種方法:取消成員變量的註釋private ArrayList list; 將帶參構造函數中加一個參數

    private ArrayList<T> list;
    public FanXingClass(T user1,T user2,List list){
        this.user1 = user1;
        this.user2 = user2;
        this.list = (ArrayList)list;
    }

對應的,在測試的時候,必須得給一個list實例

        User user1 = new User("user1","密碼1",20);
        User user2 = new User("user2","密碼2",20);
        FanXingClass<User> fx = new FanXingClass<User>(user1,user2,new ArrayList());

知識點比較簡單,但是通過自己不斷的思考練習,會對這個有個更深的理解!當然這裏涉及到泛型,泛型的內容其實不難,但是用的非常熟練也是需要一定的練習!有錯的地方,希望有大神可以指正!

發佈了20 篇原創文章 · 獲贊 5 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章