gpt4 book ai didi

java - 什么是NullPointerException,我该如何解决?

转载 作者:IT王子 更新时间:2023-10-29 07:02:21 26 4
gpt4 key购买 nike

什么是空指针异常(java.lang.NullPointerException)以及导致它们的原因?
可以使用哪些方法/工具来确定导致异常终止的原因,从而阻止异常导致程序过早终止?

最佳答案

当您声明引用变量(即对象)时,实际上是在创建指向对象的指针。考虑以下代码,在其中声明基元类型的变量:

int x;
x = 10;

在这个例子中,变量 intx,Java将为您初始化为 int。当您在第二行将 0的值赋给它时,您的 10值将写入 10所指的内存位置。
但是,当您试图声明引用类型时,会发生一些不同的情况。采用以下代码:
Integer num;
num = new Integer(10);

第一行声明一个名为 x的变量,但它实际上还不包含基元值。相反,它包含一个指针(因为类型是引用类型 num)。由于您还没有说要指向什么,Java将其设置为“cc”,意思是“我什么都没有指向”。
在第二行中, Integer关键字用于实例化(或创建)类型为 null的对象,并将指针变量 new分配给该对象。
当您声明变量但没有创建对象时, Integer会出现。所以你指的是一些实际上并不存在的东西。
如果在创建对象之前尝试取消引用 num,则会得到一个 Integer。在最普通的情况下,编译器会捕获问题并让您知道“ NullPointerException”,但有时您可能会编写不直接创建对象的代码。
例如,您可能有如下方法:
public void doSomething(SomeObject obj) {
//do something to obj
}

在这种情况下,您不会创建对象 num,而是假定它是在调用 NullPointerException方法之前创建的。注意,可以这样调用方法:
doSomething(null);

在这种情况下, num may not have been initializedobj。如果该方法打算对传入的对象执行某些操作,那么抛出 doSomething()是合适的,因为它是一个程序员错误,程序员需要该信息来进行调试。
或者,在某些情况下,方法的目的不仅仅是对传入对象进行操作,因此可以接受空参数。在这种情况下,您需要检查空参数并以不同的方式工作。您还应该在文档中对此进行解释。例如, obj可以写为:
/**
* @param obj An optional foo for ____. May be null, in which case
* the result will be ____.
*/
public void doSomething(SomeObject obj) {
if(obj != null) {
//do something
} else {
//do something else
}
}

最后, How to pinpoint the exception & cause using Stack Trace

关于java - 什么是NullPointerException,我该如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57039564/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com