日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java避免空指针异常_避免Java中的空指针异常

發布時間:2023/12/3 java 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java避免空指针异常_避免Java中的空指针异常 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

java避免空指針異常

空指針異常是Java中最常見,最煩人的異常。 在這篇文章中,我想避免這種不希望的異常。

首先讓我們創建引發空指針異常的示例

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

在以前的方法中,如果我們將“ status”變量的值傳遞為null,則會在下一行引發Null Pointer Exception

if (status.equalsIgnoreCase("Finish")) {

所以我們應該將我的代碼更改為以下代碼,以避免Null Pointer Exception

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

在以前的方法中,如果將“ status”變量的值設置為null,則不會引發Null Pointer Exception。

如果您有object.equals(“ literal”) ,則應替換為“ literal” .equals(object)

如果您有object.equals(Enum.enumElement) ,則應替換為

Enum.enumElement.equals(object)。

通常,您可以確保對象沒有等于null值的對象的equals方法。

我將繼續提供更多最佳實踐和建議。

在第1部分的帖子中,我列出了如何在equalsIgnoreCase()方法和枚舉器中避免NPE 今天我將寫以下案例
1-空集合
2-使用一些方法 3-斷言關鍵字 4-斷言類 5-異常處理 6-點語法太多 7- StringUtils類

1-空集合

空集合是沒有任何元素的集合。 一些開發人員返回的Collection的空值不包含任何元素,但是為false,您應該返回Collections.EMPTY_LIST,Collections.EMPTY_SETCollections.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 = "Mahmoud A. El-Sayed"; 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是Java 1.4中提供的關鍵字,它使您能夠測試關于代碼的假設。

assert關鍵字的語法

assert expression1 ;

expression1是被評估的布爾表達式,如果為false,則系統將拋出AssertionError而沒有詳細消息

assert expression1 : expression2 ;

expression1是被評估的布爾表達式,如果為false,系統將拋出AssertionError并且詳細消息為expression2

例如,在我的帖子中,我想斷言表達式不為空,那么我應該在下面的代碼中編寫

public static String getManager(String employeeId) { assert (employeeId != null) : "employeeId must be not null"; return "Mahmoud A. El-Sayed"; }

如果我嘗試使用getManager(null)調用getManager方法
它將引發“ java.lang.AssertionError:employeeId不能為空”

在運行代碼以啟用斷言時,請注意在java選項中使用-enableassertion

4-斷言類

斷言類存在于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 "Mahmoud A. El-Sayed"; }

如果我嘗試使用getManager(null)調用getManager方法
它將引發“ java.lang.IllegalArgumentException:employeeId必須不為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或檢查空值

嘗試catch語句

我將調用代碼更改為以下代碼

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

b-空值檢查

我將調用代碼更改為以下代碼

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類

StringUtils類是org.apache.commons.lang包的一部分,我可以使用它來避免NPE,特別是其所有方法都是null安全的

例如StringUtils。 IsEmpty(), StringUtils。 IsBlank(), StringUtils.equals() 等。
您可以從這里閱讀此類的規范

結束語編寫代碼時,請始終注意NullPointerException ,并猜測如何將其拋出到代碼中,并在代碼中編寫// TODO以便以后沒有更多時間解決它。

參考: 避免空指針異常的第1部分 , 避免空指針異常的第2部分,來自我們的JCG合作伙伴 Mahmoud A. ElSay 在Oracle Dive博客中發表。


翻譯自: https://www.javacodegeeks.com/2012/06/avoid-null-pointer-exception-in-java.html

java避免空指針異常

總結

以上是生活随笔為你收集整理的java避免空指针异常_避免Java中的空指针异常的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。