国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > C > 正文

java 出現(xiàn)NullPointerException的原因及解決辦法

2020-01-26 13:56:30
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

java 出現(xiàn)NullPointerException的原因及解決辦法

日常開(kāi)發(fā)過(guò)程中,最常見(jiàn)的異常莫過(guò)于NullPointerException,之前的時(shí)候,只是知道去找到報(bào)錯(cuò)的位置,然后去解決它,最近有空學(xué)習(xí)C語(yǔ)言,就去深究了下NullPointerException異常的本質(zhì)。

發(fā)生NullPointerException的情況:

  • 調(diào)用 null 對(duì)象的實(shí)例方法。
  • 訪問(wèn)或修改 null 對(duì)象的字段。
  • 如果一個(gè)數(shù)組為null,試圖用屬性length獲得其長(zhǎng)度時(shí)。
  • 如果一個(gè)數(shù)組為null,試圖訪問(wèn)或修改其中某個(gè)元素時(shí)。
  • 在需要拋出一個(gè)異常對(duì)象,而該對(duì)象為 null 時(shí)。

首先,我們先找到Java.lang.NullPointerException這個(gè)類(lèi),內(nèi)容很簡(jiǎn)單:

package java.lang;/** * Thrown when a program tries to access a field or method of an object or an * element of an array when there is no instance or array to use, that is if the * object or array points to {@code null}. It also occurs in some other, less * obvious circumstances, like a {@code throw e} statement where the {@link * Throwable} reference is {@code null}. */public class NullPointerException extends RuntimeException {  private static final long serialVersionUID = 5162710183389028792L;  /**   * Constructs a new {@code NullPointerException} that includes the current   * stack trace.   */  public NullPointerException() {  }  /**   * Constructs a new {@code NullPointerException} with the current stack   * trace and the specified detail message.   *   * @param detailMessage   *      the detail message for this exception.   */  public NullPointerException(String detailMessage) {    super(detailMessage);  }}

NullPointerException翻譯過(guò)來(lái)便是空指針,接下來(lái)我們首先要了解的是什么是指針,對(duì)于非C/C++的程序員來(lái)說(shuō),很多其它語(yǔ)言開(kāi)發(fā)者對(duì)指針的概念很模糊,說(shuō)白了,指針就是存儲(chǔ)變量的內(nèi)存地址,在c語(yǔ)言里面,NULL表示該指針不指向任何內(nèi)存單元,0表示指向地址為0的單元(這個(gè)單元一般是不能使用的)。先看一段C語(yǔ)言代碼:

void main() {  int* i = NULL;  printf("%#x/n", i);  printf("%#x/n", &i);  system("pause");}

在C語(yǔ)言里,你可以讀取NULL本身的值(void *)0,即0,但是讀取它指向的值,那是非法的,會(huì)引發(fā)段錯(cuò)誤。而Java里面的NULL就是直接指向了0,上述也說(shuō)了,指向地址為0的單元,一般是不能使用的。

一句話總結(jié):因?yàn)橹赶蛄瞬豢墒褂玫膬?nèi)存單元,虛擬機(jī)無(wú)法讀取它的值,最終導(dǎo)致NullPointerException。

如有疑問(wèn)請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 象山县| 岱山县| 无为县| 阳高县| 兴隆县| 青阳县| 黄浦区| 白城市| 满洲里市| 宁夏| 正阳县| 隆回县| 肇州县| 宜章县| 尼勒克县| 洞口县| 石嘴山市| 茂名市| 龙泉市| 新巴尔虎右旗| 青浦区| 含山县| 怀柔区| 桐乡市| 长海县| 满洲里市| 成安县| 乌恰县| 南乐县| 哈尔滨市| 大宁县| 澄迈县| 伊通| 濮阳县| 泸溪县| 色达县| 贡觉县| 南岸区| 安陆市| 南昌市| 虎林市|