java中空指针异常情况以及解决办法

2023年8月4日09:05:54

概述:

出现空指针异常,常常是因为我们调用的对象是空的而抛出的异常。

问题描述:

第一种:

 out.println(request.getParameter("username")); 

如果request里面并没有username的值,这时无法对空对象进行操作的,就会抛出异常。

第二种:

String userName = request.getParameter("username"); 
  If (userName.equals("root")) 
  {....} 

如果没有username值,或者username为null时,是不能将一个为null的对象与另外一个对象进行比较的。

If ("root".equals(user Name)) 
  {....}

如果返回值与常量进行比较时,就可以避免调用null对象的equals方法。不会抛出异常。

第三种:
假设有一个student类,有属性name。

Student a;
String b = a.name;

这个时候就会报错,因为a为空的,解决办法就是让a指向一个对象,Student a = new Student();

问题定位:

对于日志中的报错信息,在java中抛出异常是从内往外,因此只需要重点关注第一行报错信息,下面的报错都是由于一层层传递调用该方法导致。

Java空指针异常的若干解决方案:
Java中任何对象都可以为空,我们可以使用若干种方法来避免产生这类异常。比如我们传统的空值检测,编程规范,以及使用java中各种工具类。

(1)最常用的一种就是直接对 对象进行判断,比如if(Object == null)来对所有用到的对象进行判断,这个对象也就是我们常用的函数参数,返回值,以及类实例的成员变量等。当我们检测到null值时,我们可以异常的类型抛出更具有针对性的异常类型,再附加上我们自己加的消息内容。我们也可以直接使用一些库函数来简化代码:

Object checkData = Object.requireNoNull(resultMessage,"The resultMessage must not be null")

如果我们使用过Lombok工具的话,里面有一个@NotNull注解,就是指被注释的元素不能为空,就会自定检测。

(2)第二种方法就是遵守编程规范,可以减少一定的空指针异常的发生。

Strings.isNullOrEmpty(str);
CollectionUtils.isEmpty(collection);
StringUtils.isEmpty(str);

if(object != null) {
    object.toString();)
} // 使用toString()这种方法的话,如果object为空的话,就会抛出异常
 String.valueOf(object) //将Object转换为字符串,不管是否为null,不会抛出异常

如果返回是集合类型。而且是空的,不要返回null值,而是要返回一个空的集合,如果返回类型是对象的话,我们可以抛出异常。

public class Example {
     private static List<Integer> numbers = null;
 
     public static List<Integer> getList() {
          if (numbers == null)
               return Collections.emptyList();
          else
               return numbers;
     }
}

检查一个方法的参数,在执行方法之前,确保检查了参数是否null,当参数被适当检查后,方法会继续执行。否则抛出叫做llegalArgumentException的异常,并通知调用的方法传入的参数有误。

使用三元运算符,可以避免NullPointerException,形式如下:
boolean expression ? value1:value2;

存在NullPointerException的安全方法:

第一种使用instanceof 操作符
即使对象的引用为null,instanceOf操作符可使用。当引用为null时,instanceof操作符返回false,而且不会抛出NullPointerException,比如:

String str = null;
if(str instanceof null) {
    log.error(.......)
}

如何避免:

确保所有对象在使用之前被初始化。

  • 作者:程序猿新手_曹先生
  • 原文链接:https://blog.csdn.net/qq_41691210/article/details/110680021
    更新时间:2023年8月4日09:05:54 ,共 1768 字。