我试图创建一个程序,其中第一步是让用户输入他们的名字(在User类中)。我想创建一个方法(在另一个类中),专门读取输入,然后在我的User类中实现该方法。
但是,我收到NullPointerException错误,我不太明白为什么。
public class Main {
public static void main(String[] args) {
User newUser=new User();
newUser.CreateName();
}
}
public class User {
UserInput ui;
public void CreateName(){
System.out.println("Enter your name:");
String name= ui.Input();
}
}
public class UserInput {
public String Input(){
Scanner input=new Scanner(System.in);
String s=input.nextLine();
return s;
}
}
答案 0 :(得分:0)
UserInput的实例未初始化,它具有空值。
尝试更改用户类:
UserInput ui;
到
UserInput ui = new UserInput();
答案 1 :(得分:0)
在User
方法中实例化main
类时,UserInput ui
类的所有全局实例属性(在您的情况下为User
)都会被加载到内存中,它的默认值,因此它是自动派生数据类型,其默认值将设置为null
。
现在,您正在调用该引用上的方法null
,调用空引用上的任何方法都会导致NullPointerException
。因此,您需要初始化对象的UserInput
引用。
在声明属性UserInput ui = new UserInput();
时,所以此对象在User
类中获取全局范围,并且可以在当前类以及同一包中的其他类中访问。 / p>
或者您可以在CreateName()
方法中初始化该属性,例如
public void CreateName(){
System.out.println("Enter your name:");
ui = new UserInput();
String name= ui.Input();
}
因此该对象变为该方法的本地对象,因此您没有将其引用传递给任何其他方法,它将在方法执行完成之前进行垃圾收集。