亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

什么是空指針異常,我該如何解決?

什么是空指針異常,我該如何解決?

長風秋雁 2019-05-20 10:11:19
什么是空指針異常(java.lang.NullPointerException)以及它們的原因是什么?可以使用哪些方法/工具來確定原因,以便停止異常導致程序過早終止?
查看完整描述

12 回答

?
子衿沉夜

TA貢獻1828條經驗 獲得超3個贊

NullPointerExceptions是當您嘗試使用指向內存中沒有位置的引用(null)時發生的異常,就好像它引用了一個對象一樣。在空引用上調用方法或嘗試訪問空引用的字段將觸發a NullPointerException。這些是最常見的,但NullPointerExceptionjavadoc頁面上列出了其他方式。

可能是我能想出的最快的示例代碼來說明NullPointerException

public class Example {

    public static void main(String[] args) {
        Object obj = null;
        obj.hashCode();
    }}

在內線的第一行main,我明確地將Object引用設置為obj等于null。這意味著我有一個引用,但它沒有指向任何對象。之后,我嘗試將引用視為通過調用其上的方法指向對象。這導致a NullPointerException因為沒有代碼在引用指向的位置執行。

(這是一個技術性問題,但我認為值得一提的是:指向null的引用與指向無效內存位置的C指針不同??罩羔槍嶋H上并不指向任何位置,這與指向恰好無效的位置。)


查看完整回答
反對 回復 2019-05-20
?
郎朗坤

TA貢獻1921條經驗 獲得超9個贊

這就像你試圖訪問一個對象null??紤]下面的例子:

TypeA objA;

此時您剛剛聲明了此對象但未初始化或實例化。每當你試圖訪問其中的任何屬性或方法時,它都會拋出NullPointerException有意義的東西。

請參閱以下示例:

String a = null;System.out.println(a.toString()); // NullPointerException will be thrown


查看完整回答
反對 回復 2019-05-20
?
牧羊人nacy

TA貢獻1862條經驗 獲得超7個贊

一個null指針是一個指向無處。當你解引用一個指針p,你說“給我的數據在存儲中的位置‘P’,當p是一個null指針,該位置存儲在p就是nowhere,你說‘給我的數據在位置‘無處’?!@然,它不能這樣做,所以它拋出一個null pointer exception。

一般來說,這是因為某些東西尚未正確初始化。


查看完整回答
反對 回復 2019-05-20
?
狐的傳說

TA貢獻1804條經驗 獲得超3個贊

已經有很多解釋來解釋它是如何發生的以及如何解決它,但你也應該遵循最佳實踐來避免它NullPointerException。

另請參閱: 最佳實踐列表

我想補充一點,非常重要的是,要好好利用final修飾語。 在Java中適用時使用“final”修飾符

摘要:

  1. 使用final修飾符強制執行良好的初始化。

  2. 避免在方法中返回null,例如在適用時返回空集合。

  3. 使用注釋@NotNull@Nullable

  4. 快速失敗并使用斷言來避免null對象在不應為null時在整個應用程序中傳播。

  5. 首先使用equals與已知對象: if("knownObject".equals(unknownObject)

  6. 喜歡valueOf()toString()。

  7. 使用null安全StringUtils方法StringUtils.isEmpty(null)。


查看完整回答
反對 回復 2019-05-20
?
GCT1015

TA貢獻1827條經驗 獲得超4個贊

NullPointerException當一個聲明一個對象數組時,會發生另一次出現,然后立即嘗試取消引用它內部的元素。

String[] phrases = new String[10];String keyPhrase = "Bird";for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));}

如果比較順序顛倒,可以避免這種特殊的NPE; 即,.equals在有保證的非null對象上使用。

數組內的所有元素都被初始化為它們的公共初始值 ; 對于任何類型的對象數組,這意味著所有元素都是null。

必須初始化數組中的元素之前訪問或提領他們。

String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};String keyPhrase = "Bird";for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));}


查看完整回答
反對 回復 2019-05-20
  • 12 回答
  • 0 關注
  • 6760 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號