java - 为什么 getName() 返回 null?

标签 java string object encapsulation

编辑:感谢您的所有回答!我不知道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/

相关文章:

java - Tomcat - 如何使用 PersistentManager + FileStore 将 session 立即保存到磁盘

java - 将字符串转换为首字母缩略词时遇到问题

object - Delphi对象: shortcut for TObjectList iteration

java - Spring Java 对象依赖注入(inject)

Java:当涉及父/子时,如何获取 ArrayList 中的值?

java - 从数据库获取状态

java - 在Java中构建 "isolated"和 "automatically updated"缓存(java.util.List)

java - 使用 QueudSynchronizer 实现 CountLatch 有什么好处

mysql - 如何在不使用 ENUM 的情况下强制执行 MySQL 表中的某些字符串?

string - 如何使用Mapforce中的tokenize函数来分割字符串