面试题之认识、书写、解决、避免空指针异常

认识空指针

指针:指针存放的是内存地址。
空指针:当指针不指向任何内存地址时,就叫做空指针,例如:int[] array = null。
空指针异常: 就是一个指针不指向任何内存地址,但是你还调用他了。在调用的时候就会产生空指针异常的错误,程序运行会显示Exception in thread “main” java.lang.NullPointerException的异常提示。

为什么会产生空指针异常呢?

在内存中的栈内存中开辟了一个的存储空间,而堆内存中并没有开辟相应类型的空间,所以在栈内存中没有存放任何内存地址,由此我们可以理解为什么会产生空指针异常,调用没有的东西显然时不可以的。

书写空指针

简单来说,就是定义一个基本类的对象并赋值为null,再对该对象进行调用。

	String str = null;
	str.toString();

解决空指针

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

字符串变量未初始化;
接口类型的对象没有用具体的类初始化
当一个对象的值为空时,你没有判断为空

避免空指针

这个地方我是借鉴过来的,原文博主总结了5点:

  1. ** 字符串比较,常量放前面 **
使用equals判断时常量在前
if(常量.equals(传入的变量)){
    
}
  1. ** 初始化默认值 **
    在对象初始化的时候给它一个默认值或者默认构造实现,不要让对象直接等于null或 “”
  2. 返回空集合
    在返回一个集合的话,默认会是 null,统一规范返回一个空集合。
  3. 断言
    断言是用来检查程序的安全性的,在使用之前进行检查条件,如果不符合条件就报异常,符合就继续。
Java 中自带的断言关键字:assert,如:
assert name == null : "名称不能为空";
输出:
Exception in thread "main" java.lang.AssertionError: 名称不正确
不过默认是不启动断言检查的,需要要带上 JVM 参数:-enableassertions 才能生效。
Java 中这个用的很少,建议使用 Spring 中的,更强大,更方便好用。
Spring中的用法:
Assert.notNull(name,"名称不能为空");
  1. Optional
    Optional 是 JDK 8 新增的新特性,再也不用 != null 来判断了,这个在一个对象里面的多个子对象连续判断的时候非常有用。

最后附上原文链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值