我要回到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;
.你也可以把它放在构造函数之后(正如你所做的那样),它仍然可以.