getResourceAsStream空指针 get空指针异常_java get方法报空指针


概述

在编程语言中,空指针(Null Pointer)是一个已宣告但并未指向一个有效对象的指针,许多程序利用空指针来表示某些特定条件,例如未知长度数组的结尾或某些无法运行的操作。在可选择类型(optional type)的编程语言中,空指针通常可以跟可为Null的类型(Nullable types)和空值(Nothing value)进行比较。

空指针与未初始化的指针(uninitialized pointer)不同,空指针保证不会和有值的指针相等,而未初始化的指针则是要看所使用的编程语言或编译器而定,在部分编程语言环境下,未初始化的指针无法保证不与有值的指针相等,他可能因为存有存储器残值而指向了某个有效对象。


getResourceAsStream空指针 get空指针异常_java 判断时间不为空_02


空指针异常

当应用程序试图在需要对象的地方使用 null 时,抛出该异常。这种情况包括:

  • 调用 null 对象的实例方法。
  • 访问或修改 null 对象的字段。
  • 将 null 作为一个数组,获得其长度。
  • 将 null 作为一个数组,访问或修改其时间片。
  • 将 null 作为 Throwable 值抛出。

空指针异常原因

1、当一个对象不存在时又调用其方法会产生异常obj.method() // obj对象不存在;

2、当访问或修改一个对象不存在的字段时会产生异常obj.method() // method方法不存在;

3、字符串变量未初始化;

4、接口类型的对象没有用具体的类初始化;

当一个对象的值为空时,你没有判断为空的情况。你可以试着把下面的代码前加一行代码:


getResourceAsStream空指针 get空指针异常_integer判断不为空_03


改成:


getResourceAsStream空指针 get空指针异常_get方法报空指针_04


空指针的解决办法:

重点关注报错发生的所在行,通过空指针异常产生的两条主要原因诊断具体的错误。同时为了避免空指针的发生,最好在做判断处理时将“null”或者空值放于设定的值之前。

异常处理的语法规则

1、try 语句不能单独存在,可以和catch、finally 组成

try...catch...finally、try...catch、try...finally 三种结构,catch 语句可以有一个或多个,finally 语句最多一个,try、catch、finally 这三个关键字均不能单独使用。

2、try、catch、finally 三个代码块中变量的作用域分别独立而不能相互访问。如果要在三个块中都可以访问,则需要将变量定义到这些块的外面。

3、多个catch 块时候,Java 虚拟机会匹配其中一个异常类或其子类,就执行这个catch 块,而不会再执行别的catch 块。

4、throw 语句后不允许有紧跟其他语句,因为这些没有机会执行。

5、如果一个方法调用了另外一个声明抛出异常的方法,那么这个方法要么处理异常,要么声明抛出。


getResourceAsStream空指针 get空指针异常_get方法报空指针_05


Java空指针异常解决方法

Throwable是所有错误或异常的超类,只有当对象是这个类的实例时才能通过Java虚拟机或者Java throw语句抛出。

当Java运行环境发出异常时,会寻找处理该异常的catch块,找到对应的catch块之后,将异常交给catch块捕获。

throwable的子类是exception和error,exception等;

例如:


getResourceAsStream空指针 get空指针异常_java get方法报空指针_06


第二行报空指针异常

那么books对象为null,向上查找第一行中Dao.getData();

那么进一步查看Dao对象是否为空,若不为空,则继续向上查找,找出为null的对象

改进:

1.增加条件判断


getResourceAsStream空指针 get空指针异常_java get方法报空指针_07


2.捕获异常


getResourceAsStream空指针 get空指针异常_get方法报空指针_08