制定者和吸气者不参与测试项目

时间:2014-08-09 12:47:36

标签: java setter getter

我有三节课。我正在尝试测试吸气剂和制定者。 由于某种原因,在我在另一个类中设置变量后,变量值在原始变量中不会更改。这是我的三个班级:

package test;

 public class first {
 second sec;
 third t;

public static void main(String args[]){
    System.out.println("First");
    new first();

}
public first(){
    sec=new second();
    t=new third();
    sec.update();
}

}

//第二课

package test;

public class second {
private int x;
private int y;
public second (){
  this.x=100;
  this.y=100;
  System.out.println("Second");
}
public void update(){
    System.out.println(x);
    System.out.println(y);
}
public void setX(int x){ this.x=x;};
public void setY(int y){ this.y=y;};
public int getX (){ return this.x;};
public int getY (){ return this.y;};
}

//第三类

package test;

public class third {
 second sec;
public third(){
    sec=new second();
    sec.setX(200);
    sec.setY(200);
    System.out.println("Third");
}
}

打印出来的是:

First
Second
Second
Third
100
100

我将第三个类中的x和y设置为200.我检查了第三个构造函数是最后一个被调用的。因此设置值。但x和y的值不会改变。

4 个答案:

答案 0 :(得分:2)

您的sec.update();调用会打印不同second类实例的X和Y值,而不是更新其值的值。

public first(){
    sec=new second(); // creates an instance of second - X = 100, Y = 100
    t=new third(); // creates an instance of third, which creates a different instance of 
                   // second and updates X and Y to 200
    sec.update(); // prints the original instance of second - X and Y still contain 100
}

您可以在输出中看到 - First Second Second Third 100 100 - second构造函数被调用两次,这意味着创建了second类的两个实例。只有在其中一个中,您才能将X和Y的值设置为200。

答案 1 :(得分:1)

明白这一点:

public first(){
    sec=new second();
    t=new third();
    sec.update();
}

首先,当您实例化second课程时, x和y各占100个

然后您实例化third类,并在third class's constructor中创建不同的第二个实例,其中x和y的值不同

最后使用首次创建的第二个实例调用update(),以便打印

x =100 and y= 100

如果您使用第二个创建的第二类实例调用update(),则会打印

x =200 and y=200

答案 2 :(得分:0)

两者都是不同的实例:

sec=new second(); // OBJECT 1
t=new third();  // OBJECT 2  holds x=200 ,y=200 
sec.update(); // OBJECT 1

此处,sec指向xy值为100的对象。(对象1)

t=new third();是另一个对象,你创建了另一个第二个对象(对象xy的值为200的OBJECT 2)并将值更改为200(它是内存中的另一个对象) )。

但是在最后一行中,您正在打印您创建的OBJECT 1(秒),因此xy获得100秒。了解两者都是不同的实例。

sec指向内存中的第二个对象,其中包含xy的100个。

答案 3 :(得分:0)

首先创建了第二类对象的两次;因为每当我们调用新的ClassName()时,只创建了单个对象,但是你做了

public class third {
    second sec;

    public third() {
        sec = new second();
        sec.setX(200);
        sec.setY(200);
        System.out.println("Third");
    }
}

&安培;

public class first {
    second sec;
    third t;

    public static void main(String args[]) {
        System.out.println("First");
        new first();

    }

    public first() {
        sec = new second();
        t = new third();
        sec.update();
    }

}

在您的代码中,您创建了两个非单个对象,每个对象都有自己的实例setter / getter方法。

希望你现在明白。