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)
有人能告诉我究竟是什么问题吗?
答案 0 :(得分:4)
是 - s
为空。您永远不会将其初始化为非空引用,因此当您尝试通过调用s.print_func
取消引用它时,会抛出异常。
这与变量静态无关。如果你这样做,你会得到完全相同的异常:
public static void main(String args[])
{
sample s = null;
s.print_func();
}
编辑:要更全面地解决您的评论,请查看以下内容:
class test
{
public final static sample s = null;
}
这声明了一个类,并在其中声明了一个变量。那是不是一个对象。区分三个概念很重要:
所以如果你有:
public static final sample s = new sample();
然后s
仍然是变量;它的值将是一个非空引用,它引用类型为sample
的对象。
将s
视为一张纸,可以是空白的(null
参考)
或包含房屋的街道地址。地址本身不是房子 - 它只是获得到房子的一种方式。可以有几张纸,上面写有相同的地址。将地址复制到另一张纸上并不能创建一个新房子。
希望这有帮助。