Java 构造函数替换以前创建的对象的变量

Java 构造函数替换以前创建的对象的变量,java,constructor,Java,Constructor,我不是一个优秀的程序员,我只是在学习Java。我遇到了一个以前从未遇到过的问题。我以前使用构造函数创建类的对象没有问题,但是这里发生了一些奇怪的事情。我有一个用于表示分数的Rational类,我为它创建了以下构造函数: public Rational (int numerator, int denominator) { this.numerator = numerator; this.denominator = denominator; } 注意,我还初始化了类中的int值分子

我不是一个优秀的程序员,我只是在学习Java。我遇到了一个以前从未遇到过的问题。我以前使用构造函数创建类的对象没有问题,但是这里发生了一些奇怪的事情。我有一个用于表示分数的Rational类,我为它创建了以下构造函数:

public Rational (int numerator, int denominator)
{
    this.numerator = numerator;
    this.denominator = denominator;
}
注意,我还初始化了类中的int值分子和分母。我在类中也有一些代码来防止分母为零,但是我在搜索中删除了它来解决这个问题。唉,它什么也没做

当我试图用一个利用这个构造函数的main方法在一个单独的类文件中测试这个类时,我的问题就出现了。例如,如果创建两个新的理性,如下所示:

Rational m = new Rational(2, 3);
Rational n = new Rational(5, 6);
然后我试着用我班上的toString方法打印这些。以下是该方法的参考:

public String toString() {
    return numerator + "/" + denominator;
}
我将这样打印:

System.out.println(m);
System.out.println(n);
然而,当我这样做时,我收到的输出总是指有理数m,而不是指有理数n。也就是说,我接收输出:

5/6

5/6

他们之间没有额外的空间线。甚至当我试图使用类中的访问器方法打印每个对象的分子或分母时,这种情况也会发生,它总是引用最后创建的Rational对象

有趣的是,当我把m的打印行放在有理数m和n的创建之间时,效果很好。但是我想在程序的后面提到这些理性,所以这不是一个真正的解决方案


我做错了什么???为什么我的构造函数不能用单独的实例变量创建对象?

你知道静态是什么吗?我对静态修饰符的理解是模糊的。。。我的教授还没有就这方面做过讲座。我应该注意,类中的变量分子和分母是使用静态修饰符声明的。这是个问题吗?是的。阅读教程:啊,谢谢!因此,我对静态的误解是,它指的是一个类的对象之间共享的变量类型,例如,每辆自行车都有一个速度。现在更清楚的是,静态修饰符指的是一个变量,该变量的值对于类的所有成员都是相同的,如果这是一个适当的区别的话。我已经改变了我的类中静态修饰符的存在,现在它可以工作了。