gpt4 book ai didi

java - 使用静态作为对象时出现空指针异常?

转载 作者:行者123 更新时间:2023-12-01 18:46:08 25 4
gpt4 key购买 nike

import java.io.*;
import java.lang.*;

class sample
{
public void print_func()
{
System.out.println("This is fromprint_fun");
}
}

class test
{
public final static sample s = null;
}

public class hello
{
public static void main(String args[])
{
test.s.print_func();
System.out.println("Hello World");
}
}

线程“main”中出现异常 java.lang.NullPointerException在 hello.main(hello.java:22)

有人可以让我知道问题到底是什么吗?

最佳答案

是 - s 为空。您永远不会将其初始化为非空引用,因此当您尝试通过调用 s.print_func 来取消引用它时,会引发异常。

这与变量是静态的无关。如果这样做,您将得到完全相同的异常:

public static void main(String args[])
{
sample s = null;
s.print_func();
}

编辑:要更全面地解决您的评论,请查看以下内容:

class test
{
public final static sample s = null;
}

这声明了一个类,并在其中声明了一个变量。那不是一个对象。区分三个概念很重要:

  • 变量,它是命名的存储位置。变量有一个值,在本例中,它是一个引用的值
  • 引用,始终为 null 或获取兼容类型对象的方法
  • 一个对象

所以如果你有:

public static final sample s = new sample();

那么s仍然是一个变量;它的值将是一个非空引用,它引用 sample 类型的对象。

s 想象成一张纸,它可以是空白(null 引用) 或包含房屋的街道地址。地址本身并不是房子——它只是到达房子的一种方式。可以有几张纸,上面都写有相同的地址。将地址复制到另一张纸上并不会创建新房子。

希望有帮助。

关于java - 使用静态作为对象时出现空指针异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17759756/

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