第一次创建自己的构造函数。
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
当我输入斯蒂芬然后输入数字19.为什么它为零?
答案 0 :(得分:3)
您创建了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);
。在这种情况下抛出异常会更好,可能在构造函数之外(所以在其他地方进行验证)。
答案 1 :(得分:1)
因为您要创建两个不同的对象,所以必须使用b.getAge()
private int age;
此处age
初始化为零,这就是为什么当您致电a.getAge()
时得到0
来自javaDoc:
声明但未初始化的字段将设置为a 编译器合理默认。一般来说,这是默认的 将为零或null,具体取决于数据类型。依靠这样的 但是,默认值通常被认为是错误的编程 风格。
更好的解决方案:
创建采用名称和年龄的构造函数
public PersonDetails(String name, int age) {
if (name.equals("Stephen")) {
this.name = initialName;
}
else {
System.out.println("Access denied");
System.exit(0);
}
if (age >= 18) {
this.age = age;
}
else {
System.out.println("You are a child");
System.exit(0);
}
}
创建一个对象而不是两个