首頁>Club>
6
回覆列表
  • 1 # 使用者1v就加歐根

    空指標異常空指標異常產生的主要原因如下:(1) 當一個物件不存在時又呼叫其方法會產生異常 obj.method() // obj物件不存在(2) 當訪問或修改一個物件不存在的欄位時會產生異常 obj.method() // method方法不存在 具體情況如下:空指標錯誤( Java.lang.NullPointerException)  使用基本的Java資料型別,變數的值要麼已經是預設值,如果沒有對其正常賦值,程式便不能透過編譯,因此使用基本的Java資料型別(double,float,boolean,char,int,long)一般不會引起空指標異常。由此可見,空指標異常主要跟與物件的操作相關。  下面先列出了可能發生空指標異常的幾種情況及相應解決方案:情況一:不管物件是否為空就直接開始使用。  (JSP)程式碼段1:  out.println(request.getParameter("username"));描述:   程式碼段1的功能十分簡單,就是輸出使用者輸入的表域"username"的值。說明:  看上去,上面的語句找不出什麼語法錯誤,而且在大多數情況下也遇不到什麼問題。但是,如果某個使用者在輸入資料時並沒有提供表單域"username" 的值,或透過某種途徑繞過表單直接輸入時,此時request.getParameter("username")的值為空(不是空字串,是空物件 null。),out物件的println方法是無法直接對空物件操作,因此程式碼段1所在的JSP頁面將會丟擲 "Java.lang.NullPointerException"異常。情況二: 即使物件可能為空時,也呼叫Java.lang.Object或Object物件本身的一些方法如toString(), equals(Object obj)等操作。(JSP)程式碼段2:  String userName = request.getParameter("username");  If (userName.equals("root"))   {....}描述:  程式碼段2的功能是檢測使用者提供的使用者名稱,如果是使用者名稱稱為"root"的使用者時,就執行一些特別的操作。說明:  在程式碼段2中,如果有使用者沒有提供表單域"username"的值時,字串物件userName為null值,不能夠將一個null的物件與另一個物件直接比較,同樣,程式碼段2所在的JSP頁面就會丟擲(Java.lang.NullPointerException)空指標錯誤。(JSP)程式碼段3: String userName = session.getAttribute   ("session.username").toString();描述:  程式碼段3的功能是將session中session.username的值取出,並將該值賦給字串物件 userName。說明:  在一般情況下,如果在使用者已經進行某個會話,則不會出現什麼問題;但是,如果此時應用伺服器重新啟動,而使用者還沒有重新登入,(也可能是使用者關閉瀏覽器,但是仍開啟原來的頁面。)那麼,此時該session的值就會失效,同時導致session中的session.username的值為空。對一個為 null的物件的直接執行toString()操作,就會導致系統丟擲(Java.lang.NullPointerException)空指標異常。 解決方案:  為了確保進行操作或引用的物件非空,假若我們要對某物件進行操作或引用,我們首先去檢查該物件是否已經例項化且不為空;並且在系統中加入針對物件為空時情況的處理。  如:採用String物件儲存使用者提交的結果;在如果涉及物件的操作時,先檢測其是否為空後,檢查到物件為空後,可再選擇進行以下任一種處理方式:  處理方式 1) 檢查到物件為空時,設定物件值為空字串或一個預設值;  處理方式 2) 檢測到物件為空時,根本不執行某操作,直接跳轉到其他處理中。  處理方式 3) 檢查到物件為空時,提示使用者操作有錯誤。  將程式碼段2按以上方式進行改寫,得到:方式1:  String userName = request.getParameter("username");  // 該變數值為空時,轉化為預設空字串  If (userName == null)  userName = "";  If (userName.equals("root"))  {..........}方式2:  String userName = request.getParameter("username");  // 該變數值為空時,轉化為預設空字串,不執行有關操作。  If (usreName != null)  {  If (userName.equals("root"))  {..........} }方式3:  String userName = request.getParameter("username");  // 該變數值為空時,轉化為預設空字串,不執行有關操作。  If (usreName == null)  {  // 提示使用者輸入資訊為空  }實際中,上面提供到三種處理方式也同樣適用於其他異常的處理:異常處理方式 1) 檢查到異常出現,設定物件值為空字串或一個預設值;異常處理方式 2) 檢測到異常出現,根本不執行某操作,直接跳轉到其他處理中。異常處理方式 3) 檢查到異常出現,提示使用者操作有錯誤。

  • 中秋節和大豐收的關聯?
  • 鉛墜的種類和用法?