默认情况下,将一个对象的值初始化为1,将同样的值通过默认构造函数初始化到另一个对象中。

15 浏览
0 Comments

默认情况下,将一个对象的值初始化为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

0
0 Comments

因为您在类中使用了static关键字来声明属性。请将其替换为private关键字。

注意:private与static和非static无关。因此,“替换”并不是关键,关键是静态的存在与否。private只与可见性有关,与OP遇到的错误无关。

代码示例:

public class Example {
    private int value; // 将static关键字替换为private关键字
    public Example() {
        value = 1; // 将默认值初始化为1
    }
}

这样,当创建Example对象时,默认情况下,value属性的值将被初始化为1。

0
0 Comments

这个问题的出现原因是变量被定义为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方法中,我们使用实例变量来打印学生的姓名和父亲的姓名。

通过这样的修改,我们可以确保每个对象都具有自己的初始化值,并且不再出现将一个对象的默认值初始化为另一个对象的默认构造函数值的问题。

0