Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用用户输入调用方法时出现问题_Java - Fatal编程技术网

Java 使用用户输入调用方法时出现问题

Java 使用用户输入调用方法时出现问题,java,Java,我试图创建一个程序,其中第一步是让用户输入他们的名字(在user类中)。我想创建一个方法(在另一个类中)专门读取输入,然后在我的用户类中实现该方法 然而,我得到了一个NullPointerException错误,我不太明白为什么 public class Main { public static void main(String[] args) { User newUser=new User(); newUser.CreateName();

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

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