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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

避免Java中的空指针异常

發(fā)布時(shí)間:2023/12/3 java 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 避免Java中的空指针异常 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
空指針異常是Java中最常見,最煩人的異常。 在這篇文章中,我想避免這種不希望的異常。

首先讓我們創(chuàng)建引發(fā)空指針異常的示例

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

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

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

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

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

在以前的方法中,如果將“ status”變量的值設(shè)置為null,則不會(huì)引發(fā)Null Pointer Exception。

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

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

Enum.enumElement.equals(object)。

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

我將繼續(xù)提供更多最佳實(shí)踐和建議。

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

1-空集合

空集合是沒有任何元素的集合。 一些開發(fā)人員為沒有元素的Collection返回空值,但這是false,您應(yīng)該返回Collections.EMPTY_LIST,Collections.EMPTY_SETCollections.EMPTY_MAP。

錯(cuò)誤的代碼

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-斷言關(guān)鍵字

assert是Java 1.4中提供的關(guān)鍵字,它使您能夠測試關(guān)于代碼的假設(shè)。

assert關(guān)鍵字的語法

assert expression1 ;

expression1是被評(píng)估的布爾表達(dá)式,如果為false,則系統(tǒng)將拋出AssertionError而沒有詳細(xì)消息

assert expression1 : expression2 ;

expression1是被評(píng)估的布爾表達(dá)式,如果為false,系統(tǒng)將拋出AssertionError并且詳細(xì)消息為expression2

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

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

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

在運(yùn)行代碼以啟用斷言時(shí),請(qǐng)注意在java選項(xiàng)中使用-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)調(diào)用getManager方法
它將引發(fā)“ java.lang.IllegalArgumentException:employeeId必須不為null”

5-異常處理

我應(yīng)該小心使用try catch語句或檢查變量的空值進(jìn)行異常處理
例如

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

我將使用以下代碼進(jìn)行校準(zhǔn)

String managerId = getManager("A015"); System.out.println(managerId.toString());

它將引發(fā)“ java.lang.NullPointerException” ,因此要處理此異常,我應(yīng)該使用try catch或檢查空值

嘗試catch語句

我將調(diào)用代碼更改為以下代碼

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

b-空值檢查

我將調(diào)用代碼更改為以下代碼

String managerId = getManager("A015"); if (managerId != null) { System.out.println(managerId.toString()); } else { //write your code here }

6-點(diǎn)語法太多

一些開發(fā)人員使用這種方法,因?yàn)樗帉懙拇a更少,但是將來維護(hù)和處理異常不會(huì)更容易

錯(cuò)誤的代碼

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() 等。
您可以從這里閱讀此類的規(guī)范

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

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


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

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。