嗨,这可能看起来像一个非常愚蠢的问题,但我最近进入了java并且正在自学有关构造函数。
public class creatures {
private static String name;
private static int age;
private static String type;
public creatures( String name, int age, String type) {
this.name = name;
this.age = age;
this.type = type;
System.out.println("The creature's name is " + name + " \nThe creatures age is" + age + " \nThe creatures type is " + type);
}
public static void main(String [] args) {
creatures newcreature = new creatures("Zack", 100, "alien");
creatures newcreature1 = new creatures("Jonny", 500, "vampire");
creatures newcreature2 = new creatures("Dick", 4, "witch");
System.out.println(newcreature.name);
}
}
所以在我的main方法的system.out.println中,在打印构造函数之后,我想打印名称" Zack"通过引用我的newcreature构造函数的名称,但它只打印名称" Dick"从我做的最后一个构造函数。如何区分同一类中的这些构造函数?再次抱歉,如果这是一个愚蠢的问题。
答案 0 :(得分:2)
答案 1 :(得分:0)
因为你的名字字段是静态的,所以它共享一个公共内存。所以如果你尝试通过用不同的对象重新引用它来访问它,它将给出相同的输出。
由于您上次使用new creatures("Dick", 4, "witch");
更改了值Dick
,因此将更改为该值。
所以删除static关键字以获得所需的o / p
public class creatures {
private String name;
private int age;
private String type;
public creatures( String name, int age, String type) {
this.name = name;
this.age = age;
this.type = type;
System.out.println("The creature's name is " + name + " \nThe creatures age is" + age + " \nThe creatures type is " + type);
}
public static void main(String [] args) {
creatures newcreature = new creatures("Zack", 100, "alien");
creatures newcreature1 = new creatures("Jonny", 500, "vampire");
creatures newcreature2 = new creatures("Dick", 4, "witch");
System.out.println(newcreature.name);
}
}
输出
Zack
答案 2 :(得分:0)
类的所有数据成员都是静态的,这就是每个实例共享同一成员的原因。当你创建新的生物实例时,构造函数只是用新值覆盖旧值。
在您的代码中:
private static String name;
private static int age;
private static String type;
在生物,creature1,creature2之间共享。
删除静态关键字。
public class creatures {
private String name;
private int age;
private String type;
public creatures(String name, int age, String type) {
this.name = name;
this.age = age;
this.type = type;
System.out.println("The creature's name is " + name
+ " \nThe creatures age is" + age + " \nThe creatures type is "
+ type);
}
public static void main(String[] args) {
creatures newcreature = new creatures("Zack", 100, "alien");
creatures newcreature1 = new creatures("Jonny", 500, "vampire");
creatures newcreature2 = new creatures("Dick", 4, "witch");
System.out.println(newcreature.name);
}
}
答案 3 :(得分:0)
您的字段name
,age
和type
是静态的。这意味着它们由您的所有生物共享。所以你不能说"这个生物的名字是......",因为一个生物在你的代码中没有名字。在编写时,你只能说"生物类有这个名字......",在Java中写的是creatures.name=...
。
因此,您需要从字段中删除static
修饰符。