编辑:感谢您的所有回答!我不知道List.java中的对象p
与Main.java中的p
不同。我将它作为参数传递,现在工作正常。谢谢!
在Main.java中:
System.out.println("Enter your name:");
String name = scan.next();
name+=scan.nextLine();
String words[]=name.split("\\s");
String capitalizeWord="";
for(String w:words){
String first=w.substring(0,1);
String afterfirst=w.substring(1);
capitalizeWord+=first.toUpperCase()+afterfirst+" ";
}
Person p = new Person(capitalizeWord);
In Person.java
private String name;
private int age;
Person(String newName){
name=newName;
}
Person(int newAge){
age=newAge;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
在List.java中:
public void printInvoice(){
System.out.println("Enter your age:");
int age = scan.nextInt();
Person p = new Person(age);
System.out.println("Thank you for shopping with us, "+p.getName());
}
最后的输出是
Thank you for shopping with us, null
我不知道为什么会发生这种情况。我做错什么了吗?我认为代码是正确的?
最佳答案
每次调用构造函数时,您都会获得该对象的一个不同实例。在 Main.java
中创建的具有名称的对象存储在仅存在于 Main.java
范围内的局部变量 p
中。在 List.java
中,您创建了第二个对象,其中包含年龄,但没有名称。它还存储在名为 p
的变量中,但该变量仅在 List.java
范围内,与之前创建的对象无关。
听起来您想将名称添加到先前的对象而不是创建新对象。为此,您应该将第一个对象作为参数传递给添加年龄的代码,也许像这样:
public void addAge(Person p) {
System.out.println("Enter your age:");
int age = scan.nextInt();
p.setAge(age); // will have to make this method in the Person class
System.out.println("Thank you for shopping with us, "+p.getName());
}
调用 Person p = new Person(age);
会给出一个尚未命名的全新 Person 对象。
关于java - 为什么 getName() 返回 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61222788/