Java 使用用户输入调用方法时出现问题
我试图创建一个程序,其中第一步是让用户输入他们的名字(在user类中)。我想创建一个方法(在另一个类中)专门读取输入,然后在我的用户类中实现该方法 然而,我得到了一个NullPointerException错误,我不太明白为什么Java 使用用户输入调用方法时出现问题,java,Java,我试图创建一个程序,其中第一步是让用户输入他们的名字(在user类中)。我想创建一个方法(在另一个类中)专门读取输入,然后在我的用户类中实现该方法 然而,我得到了一个NullPointerException错误,我不太明白为什么 public class Main { public static void main(String[] args) { User newUser=new User(); newUser.CreateName();
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;
}
}
UserInput的实例未初始化,它具有空值 尝试在用户类中更改:
UserInput ui;
到
当您在
main
方法中实例化User
类时,User
类的所有全局实例属性(在您的例子中是UserInput ui
)都会加载到内存中,并带有其默认值,因此它是自动派生的数据类型,其默认值将设置为null
现在,您正在对该引用调用一个null
的方法,对null引用调用任何方法都会导致NullPointerException
。因此,您需要初始化对对象的UserInput
引用
在声明属性时,UserInput ui=newuserinput()
,因此此对象在您的用户
类中获得一个全局范围,并且可以跨当前类以及在同一包中的其他类中访问
或者可以在CreateName()方法中初始化该属性,如
public void CreateName(){
System.out.println("Enter your name:");
ui = new UserInput();
String name= ui.Input();
}
因此,该对象成为该方法的本地对象,因此您不会将其引用传递给任何其他方法,它将在方法执行完成之前被垃圾收集。帮助我们帮助您-请共享堆栈跟踪您尚未初始化uiIn用户ui
未初始化。
public void CreateName(){
System.out.println("Enter your name:");
ui = new UserInput();
String name= ui.Input();
}