使用用户输入调用方法的问题

时间:2017-06-11 04:39:08

标签: java

我试图创建一个程序,其中第一步是让用户输入他们的名字(在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;
     }
 }

2 个答案:

答案 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();
}

因此该对象变为该方法的本地对象,因此您没有将其引用传递给任何其他方法,它将在方法执行完成之前进行垃圾收集。