java 出现NullPointerException的原因及解决办法
日常开发过程中,最常见的异常莫过于NullPointerException,之前的时候,只是知道去找到报错的位置,然后去解决它,最近有空学习C语言,就去深究了下NullPointerException异常的本质。
发生NullPointerException的情况:
首先,我们先找到Java.lang.NullPointerException这个类,内容很简单:
package java.lang; /** * Thrown when a program tries to access a field or method of an object or an * element of an array when there is no instance or array to use, that is if the * object or array points to {@code null}. It also occurs in some other, less * obvious circumstances, like a {@code throw e} statement where the {@link * Throwable} reference is {@code null}. */ public class NullPointerException extends RuntimeException { private static final long serialVersionUID = 5162710183389028792L; /** * Constructs a new {@code NullPointerException} that includes the current * stack trace. */ public NullPointerException() { } /** * Constructs a new {@code NullPointerException} with the current stack * trace and the specified detail message. * * @param detailMessage * the detail message for this exception. */ public NullPointerException(String detailMessage) { super(detailMessage); } }
NullPointerException翻译过来便是空指针,接下来我们首先要了解的是什么是指针,对于非C/C++的程序员来说,很多其它语言开发者对指针的概念很模糊,说白了,指针就是存储变量的内存地址,在c语言里面,NULL表示该指针不指向任何内存单元,0表示指向地址为0的单元(这个单元一般是不能使用的)。先看一段C语言代码:
void main() { int* i = NULL; printf("%#x\n", i); printf("%#x\n", &i); system("pause"); }
在C语言里,你可以读取NULL本身的值(void *)0,即0,但是读取它指向的值,那是非法的,会引发段错误。而Java里面的NULL就是直接指向了0,上述也说了,指向地址为0的单元,一般是不能使用的。
一句话总结:因为指向了不可使用的内存单元,虚拟机无法读取它的值,最终导致NullPointerException。
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
本文向大家介绍详解Java中NullPointerException异常的原因详解以及解决方法,包括了详解Java中NullPointerException异常的原因详解以及解决方法的使用技巧和注意事项,需要的朋友参考一下 NullPointerException是当您尝试使用指向内存中空位置的引用(null)时发生的异常,就好像它引用了一个对象一样。 当我们声明引用变量(即对象)时,实际上是在创
本文向大家介绍Oracle用户被锁的原因及解决办法,包括了Oracle用户被锁的原因及解决办法的使用技巧和注意事项,需要的朋友参考一下 在登陆时被告知test用户被锁 1、用dba角色的用户登陆,进行解锁,先设置具体时间格式,以便查看具体时间 2、查看具体的被锁时间 3、解锁 4、查看是那个ip造成的test用户被锁 查看$ORACLE_HOME/network/admin/log/listene
本文向大家介绍Android中Memory Leak原因分析及解决办法,包括了Android中Memory Leak原因分析及解决办法的使用技巧和注意事项,需要的朋友参考一下 在Android开发过程中,我们经常碰到的情况就是在我们不清楚为什么情况下,程序突然出现Crash了。其中有一类日志相信大家都经常碰到过,这类日志就是OOM相关的日志。这类日志除了我们知道的Bitmap操作的时候会经常导致,
本文向大家介绍详谈php ip2long 出现负数的原因及解决方法,包括了详谈php ip2long 出现负数的原因及解决方法的使用技巧和注意事项,需要的朋友参考一下 php提供了ip2long与long2ip方法对ip地址处理。 1、ip2long — 将一个IPV4的字符串互联网协议转换成数字格式 int ip2long ( string $ip_address ) 参数: ip_addres
本文向大家介绍MySQL 出现错误1418 的原因分析及解决方法,包括了MySQL 出现错误1418 的原因分析及解决方法的使用技巧和注意事项,需要的朋友参考一下 MySQL 出现错误1418 的原因分析及解决方法 具体错误: 使用mysql创建、调用存储过程,函数以及触发器的时候会有错误符号为1418错误。 ERROR 1418 (HY000): This function has none
本文向大家介绍Android 关于“NetworkOnMainThreadException”问题的原因分析及解决办法,包括了Android 关于“NetworkOnMainThreadException”问题的原因分析及解决办法的使用技巧和注意事项,需要的朋友参考一下 网络收集的原因如下,以及解决办法: 我补充总结一下: 解决办法一: 在操作网络类(socket连接)的activity的prot