我将回到 Java 中的 OOP。在这里我遇到了简单示例的问题:
class CreateString {
private String name;
public CreateString(String name) {
this.name = name;
}
String string = new String(name);//AAA
}
public class Main {
public static void main(String[] args) {
CreateString myName = new CreateString("tomjas");
}
}
我从标记为“AAA”的行收到 NullPointerException。当我将第二行更改为
private String name="";
没关系。该代码有什么问题?我认为该字段已初始化,可以从构造函数中得出结论。有任何提示和文档指示吗?
最佳答案
您的string
变量是一个类属性。因此,它将在创建类实例时对其进行初始化。但此时 name
仍然为 null,因为您只在构造函数中为 name
赋值。所以你最终会得到一个 NullPointerException。
要修复此问题,请将 string = new String(name);
移动到构造函数中:
class CreateString {
private String name = null;
private String string = null;
public CreateString(String name) {
this.name = name;
string = new String(name);
}
}
由于构造函数仅在所有属性初始化后执行,因此将 private String string;
行放在何处并不重要。您也可以将它放在构造函数之后(就像您所做的那样),它仍然没问题。
关于java - 我得到了 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20326830/