有一句古诗云:夜来风雨声,花落知多少,套用一下空指针异常抛出来,原因知多少。

使用Java语言开发应用程序不管是J2SE还是J2EE的,没有几个开发者没经历空指针异常

(NullPointerException)错误的,作为一个runtime Exception最为常见的几种原因是:

1.         对象未初始化而直接引用对象值或者方法到的,代码示例:

package com.fish.codesample;

public class JavaNullSample {

private String name;

public JavaNullSample() {

}

public String getName() {

return name;

}

public static void main(String[] args) {

new JavaNullSample().getName().length();

}

}

2.         对象引用已经不存在或者被JDBC关闭

一个经典的例子是JDBC connection已经关闭,ResultSet对象仍然被使用中,这个时候NullPointerException就被抛出。

3.         违反某些Java容器的限制,读写Null 值

这个方面首推的就java.util.HashTable,它不接受Null 作为Key或者Value,如果试图用Null作为Key去读取HashTable将会得到NullPointerException,代码示例:

Hashtable<String,String> table = new Hashtable<String,String>();

String tKey = null;

// the following codes always throw NullPointerException

tKey = table.get(null);

table.put(tKey, null);

当使用TreeMap/TreeSet的时候,一定确保所有对象的属性的值不为Null,否则在调用get/set方法时候会抛出NullPointerException, 代码示例:

TreeMap<Person, String> tMap = new TreeMap<Person, String>();

Person personer1 = new JavaTreeMap(). new Person();

Person personer2 = new JavaTreeMap(). new Person();

personer1.setName("fish");

tMap.put(personer1, "person1");

tMap.put(personer2, "person2"); // throw NullPointerException

还有几种相对比较难的Java NullPointerException异常

1.         Java Swing/AWT NullPointerException

1)        最常见的错误时忘记初始化某个Swing组件,当调用JFrame.getContentPane().add()方法时导致NullPointerException

2)        当调用JFrame.pack()的时候抛出NullPointerException,最可能的一个原因是JFrame的容器中的Swing组件可能被开发者自己重写而导致不适用pack().

3)        Java JDK6与JDK4的Swing监听机制已经有很大的不同,如果在初始化的时候触发Listener导致执行listener的某些方很可能导致抛出NullPointerException

4)        某些Java2D/Java3D的组件可能导致NullPointerException

2.         Socket连接丢失导致IO流的Java NullPointerException

3.         资源文件加载错误导致的NullPointerException,最常见的代码示例如下:

InputStream in =this.getClass().getResourceAsStream(PropertiesName);

props.load(in);  // throw NullPointerException if xml/property files missing

4.         多线程导致的NullPointerException

这种原因导致的NullPointerException一般很难被发现,特别是在大型和复杂的系统中

而且一段时间内业很难被重现,修复这样的bug成本很高,不修复这样的bug代价很大,意味着用户可能失去对该产品的信任。

后记:Java NullPointerException做为Java Runtime 异常,在开发中减少这样错误的发生就是对代码完成Junit的单元测试,对于一些重要的代码要提高code review的次数从而提高代码质量,增加产品的可靠性。

Java NullPointerException原因知多少相关推荐

  1. java的标量和聚合量_第5节:Java基础 - 必知必会(下)

    第5节:Java基础 - 必知必会(下) 本小节是Java基础篇章的第三小节,主要讲述Java中的Exception与Error,JIT编译器以及值传递与引用传递的知识点. 一.Java中的Excep ...

  2. 05-Prohibited package name: java异常原因

    Prohibited package name: java异常原因 今天用eclipse创建了一个java project,然后建了一个名为"java"的文件夹,当启动里面的主函数 ...

  3. genicam 相机java,机器视觉必知-GenICam相机通用接口标准

    机器视觉必知-GenICam相机通用接口标准 GenICam(相机通用接口): 一种通用软件接口 通用相机接口标准 目前机器视觉行业所使用的相机几乎均以相同方式来进行配置,即:---通过在注册表中的读 ...

  4. java面试必知必会

    java面试必知必会 面向对象 成员变量成员方法 Integer相关 double 和 Double相关 多态,向上转型 hashcode.==.equals比较 java中子类继承父类时是否继承构造 ...

  5. Java0基础学习笔记、心得-day01(Java入门需知、Java入门概述、Java语言相关知识、JDK与JRE关系,常用DOS命令、JDK的下载安装与HelloWorld案例实现与常见问题。)

    一.Java入门需知  * 1.你为什么要学习编程?--兴趣.职业.薪资?  * 2.具体Java开发岗位薪资可以参考-智联招聘 前程无忧 BOSS直聘等APP  * 3.如何进入IT行业:前端工程师 ...

  6. 2017 java 知乎_2017/4/3 用java爬取知乎

    今天惠风和畅,天气晴朗,正是写代码的好时候,今天就用java来爬爬知乎. 爬取网址: https://www.zhihu.com/roundtable/jiqiganzhi/questions 所用语 ...

  7. Java XxlJob 必知必会<续篇>

    通过 Java  XxlJob 必知必会 这篇文章的学习,我们大致知道了 xxljob 是做什么的,今天这篇文章我们将继续研究一下 xxljob 的其他使用场景. Step1: 创建一个运行模式为 P ...

  8. Java架构师之路——Java中高阶知识精讲-银文杰-专题视频课程

    Java架构师之路--Java中高阶知识精讲-4372人已学习 课程介绍         Java架构师除了对软件顶层结构进行设计和搭建外,还需要负责对软件核心基础的模块进行代码开发,而掌握Java中 ...

  9. 国内大型公司,京东,携程从c .net转型java的原因有哪些?

    问题: 为什么京东.携程放弃了c#&.net而转型java,这其中的原因究竟有哪些呢? 我想到的原因有以下几点: 1. 开源语言,免费,相关产品不用花钱,微软的产品一年会花费多少? 2. 开源 ...

最新文章

  1. 将json转换成struts参数
  2. c语言线性表的逆转,数据结构(C语言)设有一个线性表E,将线性表逆置,要求逆线性表占? 爱问知识人...
  3. 全球及中国汽车零部件信息化行业需求预测与竞争战略规划报告2022年
  4. HDU4099(斐波那契数列与字典树)
  5. 使用WS-Trust / STS采样器扩展JMeter
  6. 利用EfficientNet-B5从眼底摄影检测糖尿病视网膜病变的严重程度
  7. 编写你的第一个Django应用程序
  8. Java VM(虚拟机) 参数
  9. 安卓手机小说阅读器_粉笔免费小说阅读器app下载-粉笔免费小说阅读器手机版下载v1.0.1...
  10. HTML 使用字体图标 引入图标
  11. 安卓开发(简单打开前置摄像头并显示)
  12. error TS2687:All declarations of ‘**‘ must have identical modifier
  13. CF374C Inna and Dima 题解
  14. 直播平台多人连麦技术介绍
  15. vb外部调用autocad_VB调用AutoCAD.ppt
  16. php 数组 按拼音首字母 排序 并分组
  17. 如何将文件打包到jar包里面
  18. css篇-盒子模型理解
  19. matlab机器人工具箱 欧拉角,Matlab机器人工具箱(一)
  20. 安卓配置正式包和测试包不同的名字、图标、同时安装,(极光配置测试和正式)

热门文章

  1. Css弦乐弱音器奏键位,小提琴弱音器的种类及使用方法
  2. 关于JS中target属性
  3. target属性的值
  4. 计算机考研302分调剂,艺术生考研302(艺术生考研302分能调剂到哪个学校)
  5. 文本相似度检测之余弦相似度
  6. startRecord:fail auth deny
  7. 呼叫中心中间件(mod_cti基于FreeSWITCH)-背景音(彩话)接口
  8. 华为三层交换机VRRP与DHCP综合实验
  9. win32 API函数( InvalidateRect)
  10. 平安信用卡获取落地页接口demo(PHP版)