<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    qiyadeng

    專注于Java示例及教程
    posts - 84, comments - 152, trackbacks - 0, articles - 34

    空指針異常(Null Pointer Exception)是我們平時最容易碰到的,也是最令人討厭的異常。本文介紹如何避免出現空指針異常。

    首先我們看如下的示例

    private Boolean isFinished(String status) {  
    if (status.equalsIgnoreCase("Finish")) {
    return Boolean.TRUE;
    } else {
    return Boolean.FALSE;
    }
    }


    如果status的值為空的話,那么將會出現空指針異常(本例第2行)。所以我們應該使用如下的方法
    private Boolean isFinished(String status) {
    if ("Finish".equalsIgnoreCase(status)) {
    return Boolean.TRUE;
    } else {
    return Boolean.FALSE;
    }
    }

    這樣的話,如果status為空,也不會出現空指針異常。相信我們大多數朋友已經知道這樣的方法了,如果一個對象可能為null,那么不需要直接調用它的方法。

    接下來我將接著提供幾種避免空指針的建議。

    1.判斷Collection是否為空。

    2.使用一些判斷方法。

    3.assert關鍵字。

    4.Assert類。

    5.異常處理。

    6.太多的點.操作語法。

    7.使用StringUtils類

    1.判斷Collection是否為空

    Collection 為空是指Collection中沒有元素。一些開發者如果碰到Collection中沒有元素的時候,經常return null,更好的做法是,你應該return Collections.EMPTY_LIST,Collections.EMPTY_SET或者是Collections.EMPTY_MAP.

    錯誤的代碼

    public static List getEmployees() {  
    List list = null;
    return list;
    }

    正確的代碼

    public static List getEmployees() {  
    List list = Collections.EMPTY_LIST;
    return list;
    }


    2.使用一些判斷方法

    使用一些方法如contains(),indexOf(),isEmpty(),containsKey(),ContainsValue和hasNext()等來判斷,確保不存在空值。

    示例:

    String myName = "qiyadeng";  

    List list = Collections.EMPTY_LIST;
    boolean exist = list.contains(myName);
    int index = list.indexOf(myName);
    boolean isEmpty =list.isEmpty();

    Map map =Collections.EMPTY_MAP;
    exist=map.containsKey(myName);
    exist=map.containsValue(myName);
    isEmpty=map.isEmpty();

    Set set=Collections.EMPTY_SET;
    exist=set.contains(myName);
    isEmpty=set.isEmpty();

    Iterator iterator;
    exist = iterator.hasNext();

    3.assert關鍵字

    在Java1.4版本之后,提供了斷言assert來確定你的代碼中的假設。使用的語法如下:

    assert expression1

    expression1是一個boolean表達式,如果expression1返回的false,系統將會拋出AssertError(沒有詳細信息)。

    另外一種使用方法

    assert expression1:expression2

    如果expression1返回false,那么系統將會拋出AssertError,并且詳細信息為expression2。

    示例:

    public static String getManager(String employeeId) {  
    assert (employeeId != null) : "employeeId must be not null";
    return "qiyadeng";
    }

    我使用getManager(null)來調用getManger方法,最后運行的結果是"java.lang.AssertionError:employeedId must be not null"
    注意記得使用java選項中加入-enableassertion開啟assertion功能。

    4.Assert類

    Assert類在com.bea.core.repackaged.springframework.util包中,有許多方法可以用于斷言。

    public static String getManager(String employeeId) {  
    Assert.notNull(employeeId, "employeeId must be not null");
    Assert.hasLength(employeeId, "employeeId must has length greater than 0");
    return "qiyadeng";
    }

    當我同樣使用getManager(null)來調用getManager方法,將獲得信息"java.lang.IllegalArgumentException: employeeId must be not null"。

    5.異常處理

    使用try catch處理異常或是檢查變量是否為空。

    public static String getManager(String employeeId) {  
    return null;
    }

    如上代碼,我使用下面方法調用
    String managerId = getManager("A015");  
    System.out.println(managerId.toString());

    將會發生"java.lang.NullPointerException",為了處理這個異常,我們應該使用try catch來處理異常或者是檢查變量是否為null。

    try-catch方法

    String managerId = getManager("A015");  
    try {
    System.out.println(managerId.toString());
    } catch (NullPointerException npe) {
    //write your code here
    }

    或者是對變量進行檢查
    String managerId = getManager("A015");  
    if (managerId != null) {
    System.out.println(managerId.toString());
    } else {
    //write your code here
    }

    6.不要太多的點.操作語法

    一些開發者使用太多的這樣的方法來減少代碼,但是這個對后面的維護和異常處理都是不太好的。

    錯誤的寫法

    String attrValue = (String)findViewObject("VO_NAME").getCurrentRow().getAttribute("Attribute_NAME");

    正確的寫法
    ViewObject vo = findViewObject("VO_NAME");  
    Row row = vo.getCurrentRow();
    String attrValue = (String)row.getAttribute("Attribute_NAME");

    7.使用StringUtils類

    StringUtil是org.apache.commns.lang包中的類,我們可以使用該類來避免空指針異常。

    例如 StringUtils.isEmpty(),StringUtils.isBlank,StringUtils.equals()等等,更多的你可以參考文檔

    為了不出現空指針異常,在寫代碼的過程中需要時刻檢查你的代碼是否會拋出NullPointerException,如果你沒有時間及時調整的話,使用//TODO標記,便于你后面解決問題。

    原創文章,轉載請注明: 轉載自http://www.qiyadeng.com/

    本文鏈接地址: 在Java中避免空指針異常(Null Pointer Exception)


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲2022国产成人精品无码区 | 亚洲日本一区二区一本一道| 33333在线亚洲| 免费AA片少妇人AA片直播| 亚洲国产成人精品无码一区二区 | 免费电影在线观看网站| 激情内射亚洲一区二区三区爱妻| 在线美女免费观看网站h| 亚洲美免无码中文字幕在线| 免费A级毛片无码A∨| 亚洲激情校园春色| 一二三四视频在线观看中文版免费| 亚洲同性男gay网站在线观看| 青青青国产在线观看免费网站| 亚洲人成77777在线观看网| 免费无码又爽又高潮视频| 国产AV日韩A∨亚洲AV电影| 亚洲色偷拍区另类无码专区| 久久99久久成人免费播放| 亚洲AV无码成人精品区在线观看 | 国产在线19禁免费观看国产| 免费精品久久久久久中文字幕| 亚洲一区二区三区偷拍女厕| 人人玩人人添人人澡免费| 亚洲一级免费毛片| 亚洲AV无码成人精品区大在线| 中文字幕免费在线观看动作大片| 久久av无码专区亚洲av桃花岛| 成人免费视频77777| 牛牛在线精品免费视频观看| 亚洲精品国偷自产在线| 国产福利在线免费| 日韩久久无码免费毛片软件| 亚洲国产一区国产亚洲| 无码一区二区三区免费视频| 国产免费久久久久久无码| 亚洲毛片无码专区亚洲乱| 免费在线看片网站| 亚洲黄色免费网站| 九九全国免费视频| 亚洲av无码片在线观看|