Java 构造函数 - 为什么年龄返回为零?

标签 java constructor

第一次创建自己的构造函数。

import java.util.Scanner;

public class Person {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("Please enter your name");
        PersonDetails a = new PersonDetails(input.nextLine());
        System.out.println("Enter your age");
        PersonDetails b = new PersonDetails(input.nextInt());

        System.out.println("So your name is" + " " + a.getName() + " and you are" + " " + a.getAge());

    }
}

PersonDetails 类

public class PersonDetails {
    private String name;
    private int age;

    public PersonDetails(String initialName) {
        if(initialName.equals("Stephen")) {
            name = initialName;
        }
        else{
            System.out.println("Access denied");
            System.exit(0);
        }
    }
    public String getName() {
        return name;
    }

    public PersonDetails(int initialAge) { 
        if(initialAge >= 18) {
            age = initialAge;
        }
        else{
            System.out.println("You are a child");
            System.exit(0);
        }
    }

    public int getAge() {
        return age;
    }
}

输出是:

请输入您的姓名

斯蒂芬

输入您的年龄

19

所以你的名字是斯蒂芬,你是 0

当我输入 Stephen 然后输入数字 19 时。为什么它是零?

最佳答案

您创建了 2 个 PersonDetails 实例。 a 实例只设置了名字,b 实例只设置了年龄。

您可以创建一个新的构造函数,将姓名和年龄作为参数:

  public PersonDetails(String initialName, int initialAge) {
    if (initialName.equals("Stephen")) {
      name = initialName;
    }
    else {
      System.out.println("Access denied");
      System.exit(0);
    }

    if (initialAge >= 18) {
      age = initialAge;
    }
    else {
      System.out.println("You are a child");
      System.exit(0);
    }
  }

然后,按如下方式使用您的类:

Scanner input = new Scanner(System.in);
System.out.println("Please enter your name");
String name = input.nextLine();
System.out.println("Enter your age");
Int age = input.nextInt();
PersonDetails a = new PersonDetails(name, age);

System.out.println("So your name is" + " " + a.getName() + " and you are" + " " + a.getAge());

我也不建议在类的构造函数中使用 System.exit(0);。在这种情况下最好抛出一个异常,可能在构造函数之外(所以在其他地方进行验证)。

关于Java 构造函数 - 为什么年龄返回为零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33545543/

相关文章:

java - 是否可以在 Spring Boot 中在运行时构建自定义查询?

c++ - 这在 C++ 构造函数中有什么作用?

android 注释 MyTask_(Context) 在 MyTask_ 中具有私有(private)访问权限

c# - 尝试使用 NUnit 测试构造函数时出现有关构造函数中参数的错误

java - 使用构建器模式更新对象

java - Spring-Security OpenId 不起作用

java - FTPClient检查权限

java - 字符串的 charAt 值(从整数转换而来)匹配,尽管它们不同

delphi - 如何正确构建私有(private)的(又名未注册的 DirectShow 过滤器)(有源代码)?

c++ - 在构造函数中(不)做什么