java - 访问静态字段时出现 NullPointerException

标签 java nullpointerexception

正如他们所说,System 是最终类,它具有非类型 PrintStream 作为字段成员,而 println 是 PrintStream 类中的方法。

我创建了一个类 UseNumber ,其静态字段 no 类型为 Number ,只想访问 Number 类的方法,但它抛出 NullPointerException >

public class Number {

    private int first;
    private int second;


    public int getFirst() {
        return first;
    }

    public void setFirst(int first) {
        this.first = first;
    }

    public int getSecond() {
        return second;
    }

    public void setSecond(int second) {
        this.second = second;
    }

}

以及 UseNumber 类

public class UseNumber {
    private static Number no;

    public static void main(String[] args) {
        UseNumber.no.setFirst(12); //throwing nullpointer exception here
        UseNumber.no.setSecond(22);
        System.out.println(UseNumber.no.getFirst()+UseNumber.no.getSecond());

    }


}

最佳答案

回复:NullPointerException

setFirst 不是静态方法,它需要 Number 的实例。你没有创造一个。您刚刚声明了一个名为 no 的 Number 变量。由于默认情况下它初始化为 null,因此您将收到 NullPointerException

修复它的一种方法:

private static Number no = new Number();

在 UseNumber 中将变量 no 声明为静态仅意味着您无需使用 UseNumber 实例即可访问此对象。但是这个静态声明不会级联到no的方法。正如您收到的错误所强调的那样,他们仍然需要一个实例。

回复:System.out

outSystem 的静态成员 - 但它已经是一个实例化对象。

事实上,如果你查看System的代码,你会发现这一行:

out = com.ibm.jvm.io.ConsolePrintStream.localize(new BufferedOutputStream(new FileOutputStream(FileDescriptor.out)), true);

所以当你说:

System.out

系统将为您提供名为out的初始化PrintStream对象。本质上,System.out.println 只是一个快捷方式:

PrintStream p = System.out;
p.println();

关于java - 访问静态字段时出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15739800/

相关文章:

java - 将 Swing 应用程序从 Java 6 迁移到 Java 7 Update 11 时运行时内存增加

java - 在使用xml的android TextView中使用自定义字体

java - 当我使用 Autowiring 和组件注释时,我的 spring bean 没有被注入(inject)或创建

java - 文件排序器 - fileNotFoundException

java - 每个字符串都作为 SecretKeySpec 的参数?

java - 反转期间列表

java - 获取数字为 6 之后的数字,但我想要所有数字

java - getClassLoader().getResource(filepath) 返回空指针

java - JFileChooser 错误消息 NullPointerException

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