導航:首頁 > 編程語言 > java指針異常處理

java指針異常處理

發布時間:2022-12-17 21:37:24

1. java中的空指針異常怎麼解決

原文:https://www.hu.com/question

你這個問題的解決

問題定位:

在堆棧異常信息的第一行就可以定位到是哪裡出了空指針,倘若這里不是你寫的類,可以往下翻一下,找到你寫的類,就是這里出現的空指針。

問題解決:

對一個空對象調用裡面的方法或者屬性的時候會報空指針,檢查這個對象為什麼是空即可。

Java 空指針異常的若干解決方案

Java 中任何對象都有可能為空,當我們調用空對象的方法時就會拋出 NullPointerException 空指針異常,這是一種非常常見的錯誤類型。我們可以使用若干種方法來避免產生這類異常,使得我們的代碼更為健壯。本文將列舉這些解決方案,包括傳統的空值檢測、編程規范、以及使用現代 Java 語言引入的各類工具來作為輔助。

運行時檢測

最顯而易見的方法就是使用 if (obj == null) 來對所有需要用到的對象來進行檢測,包括函數參數、返回值、以及類實例的成員變數。當你檢測到 null 值時,可以選擇拋出更具針對性的異常類型,如 IllegalArgumentException,並添加消息內容。我們可以使用一些庫函數來簡化代碼,如 Java 7 開始提供的 Objects#requireNonNull 方法:

public void testObjects(Object arg) {
Object checked = Objects.requireNonNull(arg, "arg must not be null");
checked.toString();}

Guava 的 Preconditions 類中也提供了一系列用於檢測參數合法性的工具函數,其中就包含空值檢測:

public void testGuava(Object arg) {
Object checked = Preconditions.checkNotNull(arg, "%s must not be null", "arg");
checked.toString();
}

我們還可以使用 Lombok 來生成空值檢測代碼,並拋出帶有提示信息的空指針異常:

public void testLombok(@NonNull Object arg) {
arg.toString();

生成的代碼如下:

public void testLombokGenerated(Object arg) {
if (arg == null) {
throw new NullPointerException("arg is marked @NonNull but is null");
}
arg.toString();
}

這個註解還可以用在類實例的成員變數上,所有的賦值操作會自動進行空值檢測。

編程規范

·通過遵守某些編程規范,也可以從一定程度上減少空指針異常的發生。

使用那些已經對 null 值做過判斷的方法,如 String#equals、String#valueOf、以及三方庫中用來判斷字元串和集合是否為空的函數:

if (str != null && str.equals("text")) {}
if ("text".equals(str)) {}

if (obj != null) { obj.toString(); }
String.valueOf(obj); // "null"

// from spring-core
StringUtils.isEmpty(str);
CollectionUtils.isEmpty(col);
// from guava
Strings.isNullOrEmpty(str);
// from commons-collections4
CollectionUtils.isEmpty(col);

·如果函數的某個參數可以接收 null 值,考慮改寫成兩個函數,使用不同的函數簽名,這樣就可以強制要求每個參數都不為空了:

public void methodA(Object arg1) {
methodB(arg1, new Object[0]);
}

public void methodB(Object arg1, Object[] arg2) {
for (Object obj : arg2) {} // no null check
}

·如果函數的返回值是集合類型,當結果為空時,不要返回 null 值,而是返回一個空的集合;如果返回值類型是對象,則可以選擇拋出異常。Spring JdbcTemplate 正是使用了這種處理方式:

// 當查詢結果為空時,返回 new ArrayList<>()
jdbcTemplate.queryForList("SELECT * FROM person");

// 若找不到該條記錄,則拋出
jdbcTemplate.queryForObject("SELECT age FROM person WHERE id = 1", Integer.class);

// 支持泛型集合
public <T> List<T> testReturnCollection() {
return Collections.emptyList();
}

靜態代碼分析

Java 語言有許多靜態代碼分析工具,如 Eclipse IDE、SpotBugs、Checker Framework 等,它們可以幫助程序員檢測出編譯期的錯誤。結合 @Nullable 和 @Nonnull 等註解,我們就可以在程序運行之前發現可能拋出空指針異常的代碼。

但是,空值檢測註解還沒有得到標准化。雖然 2006 年 9 月社區提出了 JSR 305 規范,但它長期處於擱置狀態。很多第三方庫提供了類似的註解,且得到了不同工具的支持,其中使用較多的有:

2. java空指針異常怎麼解決

找到空指針的引用,實例化對象就可以了

3. java 空指針異常

當應用程序試圖在需要對象的地方使用 null 時就會拋出空指針異常
當polyNext.x[j]取到的值為空時,polyNext.x[j].degree所以就會報空指針異常

其他情況也是一樣
比如
Test t=null;
t.a;//t為空的時候不管這里是調用t的方法還是屬性就會報空指針異常了

4. 關於java中空指針異常

空指針異常產生的主要原因如下:
(1)當一個對象不存在時又調用其方法會產生異常obj.method() // obj對象不存在
(2)當訪問或修改一個對象不存在的欄位時會產生異常obj.method() // method方法不存在
(3)字元串變數未初始化;
(4)介面類型的對象沒有用具體的類初始化,比如:
List lt;會報錯
List lt = new ArrayList();則不會報錯了
當一個對象的值為空時,你沒有判斷為空的情況。你可以試著把下面的代碼前加一行代碼:
if(rb!=null && rb!="")
改成:
if(rb==null);
if(rb!==null&&rb!="") 或者if((「」).equals(rb))

空指針的解決辦法:
重點關注報錯發生的所在行,通過空指針異常產生的兩條主要原因診斷具體的錯誤。同時為了避免空指針的發生,最好在做判斷處理時將「null」或者空值放於設定的值之前。

5. java中空指針異常怎麼解決

空指針異常是運行期的異常,編譯的時候是不會檢查的,只有運行的時候才會拋出,一般情況下如果出現了空指針異常,事先你不知道會有這個異常,就說明你的程序有bug,當然就要找出這個bug,然後在變數調用之前先給它賦值,另外有一種情況,你事先知道某個操作會拋出空指針異常,常見一些非法的操作,但是又無法避免用戶執行這個操作,就可以通過try,catch塊捕獲這個異常,然後給用戶一個反饋信息,告知這個操作是非法的,因為如果你直接拋出異常的話,用戶可能會看不懂,比如拋出了java.lang.nullpointexception,一般的軟體使用者是看不懂的,你試想一下如果你在玩一個游戲的時候,忽然之間拋出了一大堆異常,你肯定會埋怨這個游戲垃圾,竟然會出現這樣的低級錯誤。

6. java 空指針異常問題。。。不知道該怎麼解決。

空指針異常一般是你直接調用了未賦值的變數。比如前面你定了一個變數Sring str = null;後面沒有另外賦值直接用就會報錯。

7. java空指針異常如何處理

構造函數中初始化錯誤,你已經定義了這四個變數
...
TextField ip1,ip2,ip3,ip4;
Button bt;
test()
{
Frame f1=new Frame("index");
ip1=new TextField(5);
ip2=new TextField(5);
ip3=new TextField(5);
ip4=new TextField(5);
....
還有int check()函數記得要處理字元轉數字的錯誤java.lang.NumberFormatException

8. java 空指針異常處理

Exception2
finally

分析:

首先NullPointerException被catch(Exception e1)捕獲,列印Exception2,因為有finally,最終還會執行finally中的代碼。

注意:

IOException不是運行期異常,方法顯示拋出,所以,你的run方法肯定要拋出IOException,否則編譯通不過。

9. java 出現空指針異常時默認為指定值,怎麼處理

java 出現空指針異常時默認為指定值的解決方式:

  1. 查找對象是否初始化,定位代碼出錯點,進行賦值初始化。

  2. 檢查數據是否越界訪問,將數組的大小擴大。

如下代碼:

packagecom.qiu.lin.he;

publicclassCeShi{
publicstaticvoidmain(String[]args){
CeShice=null;
System.out.println(ce.toString());//對象沒有初始化,也會報空指針

int[]intStr=newint[]{1,2,3,4,5};
System.out.println(intStr[5]);//訪問第六個下標就會出錯
}

}

運行結果如下:

10. java空指針異常怎麼弄

你只要將空指針處理就可以 了。
比如對象String s=way(dfsds);
if(s!=null){
s.way2();
}else{
system.out.println("對象為空");
}

閱讀全文

與java指針異常處理相關的資料

熱點內容
磁力計校正演算法 瀏覽:491
解壓縮後變小了 瀏覽:957
智友文件夾 瀏覽:81
android操作系統開發的操作系統 瀏覽:478
原神手機怎麼改b站伺服器 瀏覽:296
樁基箍筋加密區高度規范 瀏覽:91
手機櫻花動漫app怎麼用 瀏覽:382
php科學計數法轉換 瀏覽:642
sip認證演算法 瀏覽:785
androidapp卡頓原因 瀏覽:905
25編程器電路 瀏覽:849
安卓九是什麼東西 瀏覽:939
隱藏nodejs命令行窗口 瀏覽:62
人體與寫生素描pdf 瀏覽:883
java集合性能 瀏覽:143
單片機三線通信 瀏覽:209
崑山ug編程培訓學費 瀏覽:628
黃色app怎麼盈利的 瀏覽:957
怎麼修改linux密碼 瀏覽:703
國家發展中心app長什麼樣子 瀏覽:242