Java NullPointerException原因知多少
来源:互联网 发布:民国报刊数据库 编辑:程序博客网 时间:2024/06/06 20:41
有一句古诗云:夜来风雨声,花落知多少,套用一下空指针异常抛出来,原因知多少。
使用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原因知多少
- Java NullPointerException原因知多少
- java.lang.NullPointerException的原因
- 报java.lang.NullPointerException原因
- 如何查找java.lang.NullPointerException的原因
- 报java.lang.NullPointerException错误的原因
- java.lang.NullPointerException的错误原因
- JAVA学习21_报java.lang.NullPointerException的原因
- java的StackOverflowError和java.lang.NullPointerException异常的原因
- android启动程序报java.lang.NullPointerException的原因
- java.lang.NullPointerException的原因(空指针)
- Java中出现了一个不知原因的NullPointerException
- NullPointerException原因及解决办法
- NullPointerException异常的原因
- NullPointerException异常的原因
- NullPointerException的例子、原因
- Volley报NullPointerException原因
- java nullpointerexception
- LeetCode_Plus One
- 【蓝桥杯题目分析】2014年第五届——第一题:啤酒和饮料
- 如何判断对象类型/对typeof方法使用认识
- C++引用二常引用:
- 状态压缩DP——POJ 2923
- Java NullPointerException原因知多少
- 百度贴吧爬虫【练手】
- AT&T汇编语言语法
- Hadoopo——删除文件
- 详解JNDI的lookup资源引用 java:/comp/env
- 5.6.3 super限定
- 黑马程序员——小白入门之Java概述
- SharePoint 2013的限制(二)网站集和列表/文档库
- IOS SWIFT基本画图教程