默认情况下,将一个对象的值初始化为1,将同样的值通过默认构造函数初始化到另一个对象中。
默认情况下,将一个对象的值初始化为1,将同样的值通过默认构造函数初始化到另一个对象中。
我对一个对象初始化了一个值,然后声明了另一个同类的对象,但是第一个对象的值默认赋给了第二个对象,而不是默认的空值。\n以下是存储有关学生信息的类:\n
public class Student { static String name; static String fatherName; public Student(String name, String fatherName) { this.name = name; this.fatherName = fatherName; } public Student() { } public static void showName() { System.out.println("Hello my name is : " + name + "\nMy father name is: " + fatherName); } }
\n以下是测试类:\n
public class Test { public static void main(String[] args) { Student st1 = new Student("xyz", "abc"); st1.showName(); Student st2 = new Student(); st2.showName(); } }
\n这里我创建了两个对象,首先对第一个对象(st1)进行了初始化,然后我使用默认对象声明了第二个对象,然后我在两个对象上都调用了相同的方法。为什么使用第二个对象调用的方法打印的是传递给第一个对象的值,而不是默认的空值?\n输出结果:\n
Hello my name is : xyz My father name is: abc Hello my name is : xyz My father name is: abc Process finished with exit code 0
这个问题的出现原因是变量被定义为static,使其成为了类变量而不是实例变量。解决方法是从变量定义中移除static关键字,这样变量将按预期进行初始化。
以下是修改后的代码:
public class Student { private String name; private String fatherName; public Student(String name, String fatherName) { this.name = name; this.fatherName = fatherName; } public Student() {} public void showName(){ System.out.println("Hello my name is: " + name + "\nMy father name is: " + fatherName); } }
在这个修改后的代码中,name和fatherName变量被定义为实例变量,而不是类变量。因此,每个Student对象都将拥有自己的name和fatherName值。在showName方法中,我们使用实例变量来打印学生的姓名和父亲的姓名。
通过这样的修改,我们可以确保每个对象都具有自己的初始化值,并且不再出现将一个对象的默认值初始化为另一个对象的默认构造函数值的问题。