文档章节

关于NullPointerException的引发原因

琴弦上的鱼
 琴弦上的鱼
发布于 2014/08/29 13:03
字数 766
阅读 30
收藏 0

NullPointerException,为什么报这种错误,让你知道原因却也云里雾里,整死人。。正所谓会了不难,难了不会。现在写下与大家分享。这种报错肯定是java代码的错。以下是从网上看到的,很好:

[ 所谓空指针异常,是因为用空(null)去调用属性或方法。
null表示没有这个对象,既然没有这个对象,那么去调用他的属性和方法,就会报异常。
<--主要有以下几种原因:
1、使用了未初始化的变量(虽然已经声明)
2、使用了未初始化的对象(虽然已经声明)
3、使用了关键字或已存在的类名作变量对象方法或类名。

当应用程序试图在需要对象的地方使用 null 时,抛出该异常。
<--这种情况包括:
调用 null对象的实例方法。
访问或修改null对象的字段。
将null作为一个数组,获得其长度。
将null作为一个数组,访问或修改其时间片。
将null作为Throwable值抛出。]

但我看完之后还是感觉无从下手,不知错在什么地方。毕竟javabean没有任何语法上的错误,真是难过。语法上没错,逻辑上肯定有错。所以建议从逻辑着手。现在以自己的程序为例。我的程序是实现留言簿的。其过程是将表单的内容先写入DB,在从DB中读取数据到留言簿。下面是我解决问题的流程:

1、数据库问题。抛出空指针异常,那就是数据没有传过来。自信已经把Oracle搞定(专做的服务器,本机只安装客户端就ok。甲骨文也真是名不虚传,也能整死人),只是连通没有测试到底能不能自如读写数据。试试才发现不能,为什么,没有Oracle jdbc驱动,此时激动不已,以为原因很有可能就在这里。。百般之后,数据库已经没有问题,但仍然NullPointerException。。。。。继续努力

2、还是要走逻辑。无论怎么执行程序,发现数据表是空的,显然没有执行数据写入操作。切断从DB中读取数据到留言簿的逻辑。于是就可以先来排查此之前的逻辑问题。为什么会写入失败?此时我尝试不把表单中的数据写入数据库,而是通过jsp页面输出。奇怪的问题出现了,使用Bean的属性方法没有问题,而使用getProperty失败。为什么?前者是直接调用Bean的属性方法,当然没问题。后者则不同,为了获得属性a的值,默认使用的bean方法为getA(),如果javabean中写为了getAb()那就肯定不行了。我正是犯的这个错误。。。。汗阿。这样一来值传不过去,在写入DB时所对应的变量当然是空的了。

本文转载自:http://cometlj.iteye.com/blog/387023

琴弦上的鱼
粉丝 3
博文 41
码字总数 6479
作品 0
乌鲁木齐
程序员
私信 提问
阿里巴巴Java开发手册 梳理笔记 - RuntimeException 应预先检查进行规避

阿里巴巴Java开发手册 梳理笔记 - RuntimeException 应预先检查进行规避 规约内容: 扩展资料 另一个角度看『异常』 Java异常梳理

晨猫
2018/12/26
59
0
Effective Java 第三版——74. 文档化每个方法抛出的所有异常

Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所以JDK 最好下载 JDK 9以上的版本。 74. 文档化每个方...

M104
03/29
0
0
Java中的ExceptionInInitializerError异常及解决方法

当在静态初始化块中出现了异常的时候,JVM会抛出 java.lang.ExceptionInInitializerError异常。如果你了解Java中的静态变量,你会知道它们是在类加载的时候进行初始化的。如果在这个静态变量...

solar.xie
2016/03/31
281
0
android学习笔记(二)

常见的运行时异常: 1.运用程序异常Force Close(FC) 现象:程序异常关闭 原因:运用运行时为捕获异常 Runtime 常见的异常: 1)NullPointerException 判断对象是否为空 2)ArrayOutOfBoundsE...

cg19910712
2013/09/02
0
0
Android 中文API (91) —— GestureDetector

一、结构 public class GestureDetector extends Object java.lang.Object android.view.GestureDetector 二、概述   通过系统提供的来监测各种手势和(触摸)事件。当一个指定的手势事件发...

walb呀
2017/12/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

MySQL左连接问题,右表做筛选,左表列依然在

两张表,一张user表,一张user_log表 CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(20) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFA......

bengozhong
11分钟前
3
0
重新开始学Java——多线程基础

多线程 进程 主流计算机操作系统都支持同时运行多个任务 , 每个任务通常就是一个程序 , 每个运行中的程序就是一个进程或者多个进程 。 进程的特点 独立性 进程是系统中独立存在的实体 可以...

大家都是低调来的
12分钟前
1
0
注解在Java中是如何工作的?

> 来一点咖啡,准备好进入注解的世界。 注解一直是 Java 的一个非常重要的部分,它从 J2SE 5.0 开始就已经存在了。在我们的应用程序代码中,经常看到 @Override 和 @Deprecated 这样的注解。...

liululee
14分钟前
4
0
Docker 容器连接

Docker 容器连接 容器间的链接有两种方法,你选择其一即可 网络端口映射 docker run -d -P docker run -d -p-P :是容器内部端口随机映射到主机的高端口。-p : 是容器内部端口绑定到指定...

测者陈磊
17分钟前
3
0
车载导航应用中基于Sketch UI主题定制方案的实现

1.导读 关于应用的主题定制,相信大家或多或少都有接触,基本上,实现思路可以分为两类: 内置主题(应用内自定义style) 外部加载方式(资源apk形式、压缩资源、插件等) 其实,针对不同的主题...

阿里云官方博客
23分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部