Java NullPointerException原因知多少

简介:   有一句古诗云:夜来风雨声,花落知多少,套用一下空指针异常抛出来,原因知多少。 使用Java语言开发应用程序不管是J2SE还是J2EE的,没有几个开发者没经历空指针异常 (NullPointerException)错误的,作为一个runtime Exception最为常见的几种原因是: 1.

 

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

使用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 JDK6JDK4Swing监听机制已经有很大的不同,如果在初始化的时候触发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的次数从而提高代码质量,增加产品的可靠性。

 

目录
相关文章
|
12天前
|
存储 设计模式 缓存
从一个 NullPointerException 探究 Java 的自动装箱拆箱机制
这行代码一个对象方法都没有调用,怎么会抛出 NullPointerException 呢?
22 9
|
21天前
|
Java
Java“NullPointerException”解决
Java中的“NullPointerException”是常见的运行时异常,发生在尝试使用null对象实例的方法或字段时。解决方法包括:1. 检查变量是否被正确初始化;2. 使用Optional类避免null值;3. 增加空指针检查逻辑。
|
15天前
|
Java 容器
Java“NullPointerException”解决
Java中的“NullPointerException”是当程序试图使用一个空对象引用时抛出的异常。解决方法包括:检查变量是否为null、使用Optional类、利用断言和合理初始化变量等。确保代码健壯性,避免运行时错误。
|
5月前
|
XML Java 数据库连接
Java NullPointerException原因知多少
Java NullPointerException原因知多少
28 0
|
Java
如何优雅的避免Java中:NullPointerException(空指针异常)
如何优雅的避免Java中:NullPointerException(空指针异常)
114 0
|
Java 开发者
Java:Optional处理NullPointerException空指针异常的利器
Java:Optional处理NullPointerException空指针异常的利器
159 0
|
消息中间件 JavaScript 小程序
Java14 处理 NullPointerException 新方式,真的太香了!
Java14 处理 NullPointerException 新方式,真的太香了!
|
Java
18、Java——NullPointerException异常的原因和解决办法
18、Java——NullPointerException异常的原因和解决办法
780 0
18、Java——NullPointerException异常的原因和解决办法
|
运维 Java 容器
Java 8 新特性 Optional 类学习,理解并应用。NullPointerException空值检测
JDK1.8开始引入的特性,Optional 类主要解决空指针异常(NullPointerException)问题。 Optional类是一个可能包含或不包含非空值(可以为null)的容器对象。 如果一个值存在,调用 isPresent()方法将返回true、get()方法将返回该对象。 Optional类提供判断空值的方法,使用其中方法可以不用再显式地进行空值检测。
182 0
Java 8 新特性 Optional 类学习,理解并应用。NullPointerException空值检测
|
Java 测试技术 API
Java8的Stream方法findAny空指针异常(NullPointerException)实例对比
Java8的Stream方法findAny空指针异常(NullPointerException)实例对比
708 0