Java 将对象用作构造函数的变量

Java 将对象用作构造函数的变量,java,object,constructor,Java,Object,Constructor,我有一个关于在构造函数中使用对象作为变量的问题。这可能很简单,但我真的想不出该做什么,我的java书也帮不上什么忙。说我想这么做 Fraction f3 = new Fraction(1, 2); Fraction f5 = new Fraction(f3); 第一个对象的构造函数是: public Fraction(int n, int d) { if (d == 0) { numerator = 0; denominator = 1;

我有一个关于在构造函数中使用对象作为变量的问题。这可能很简单,但我真的想不出该做什么,我的java书也帮不上什么忙。说我想这么做

Fraction f3 = new Fraction(1, 2);
Fraction f5 = new Fraction(f3);
第一个对象的构造函数是:

public Fraction(int n, int d)

{
    if (d == 0)
    {
        numerator = 0;
        denominator = 1;
        System.err.println("Error: Invalid Denominator (" + d + ")");
    }
    else if (d < 0)
    {
        int nn = Math.abs(n) * (-1);
        numerator = nn;
        denominator = Math.abs(d);
    }
    else
    {
    numerator = n;
    denominator = d;
    }

}

我想不出如何定义构造函数,让它将一个新对象设置为给定的对象。如果有人能帮我一把,或者给我一些建议,让我找到答案,我将不胜感激

你想要这样的东西吗

public Fraction(Fraction f){
  this.n = f.n;
  this.d = f.d;
}
Fraction a = .... ;
Fraction b = new Fraction(a);
System.out.println(a==b);
打印
true
?这在Java中是不可能的<代码>新建始终生成一个与所有以前存在的对象分离的新对象

(这与ECMAScript相反,ECMAScript允许构造函数返回现有对象并丢弃运行时创建并作为构造函数的
This
传递的新对象)。

我将使用“构造函数链接”来确保对一个对象所做的更改反映在另一个对象中

// copy constructor
public Fraction(Fraction f) {
    this(f.numerator, f.denominator); // call the regular constructor with f's params
}

当然,这假设“分子”和“分母”被定义为细分的公共成员。我不建议这样做——如果逻辑发生变化,你很快就会发现一个bug。@TravelingTechGuy不,因为你在文件中。您可以完全访问同一类的成员,即使他们不是
对象的成员。@Tech Guy。不,因为构造函数在分数中,所以它可以看到所有可见的成员。谢谢。它工作得很好。我已经为分子和分母设置了实例变量。如果n=-1,d=-1,分子设置为-1,分母设置为1,这是故意的吗?请注意,
Math.abs
只测试“参数”
Fraction a = .... ;
Fraction b = new Fraction(a);
System.out.println(a==b);
// copy constructor
public Fraction(Fraction f) {
    this(f.numerator, f.denominator); // call the regular constructor with f's params
}