我有三节课。我正在尝试测试吸气剂和制定者。 由于某种原因,在我在另一个类中设置变量后,变量值在原始变量中不会更改。这是我的三个班级:
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的值不会改变。
答案 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
指向x
和y
值为100的对象。(对象1)
t=new third();
是另一个对象,你创建了另一个第二个对象(对象x
和y
的值为200的OBJECT 2)并将值更改为200(它是内存中的另一个对象) )。
但是在最后一行中,您正在打印您创建的OBJECT 1(秒),因此x
和y
获得100秒。了解两者都是不同的实例。
sec
指向内存中的第二个对象,其中包含x
和y
的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方法。
希望你现在明白。