我试图学习如何在已经创建的实例后更改它。我有一个带有循环的构造函数,可以打印我的设置变量。变量设置从0开始被扰乱,循环循环直到设置变量不为0.我明显错误的期望是:
我问:
如果有更好的方法,请留下一个例子,以便我可以学习。
public class test2 extends Thread {
private int setting;
public void setSetting(int input) {
this.setting = input;
}
public test2() {
while (setting == 0) {
System.out.println(setting);
}
}
public static void main(String[] args) {
test2 object = new test2();
object.setSetting(1);
}
}
答案 0 :(得分:1)
将创建一个名为object的新实例。
循环将运行,因为设置变量为0。
是。你是对的。
设置变量将更改为1.
这不正确,因为构造函数中的循环仍在运行,并且控件未从构造函数返回,因此未执行下一个语句object.setSetting(1);
。
您可以通过创建两个线程来实现此目的。一个将循环,直到变量为0,另一个将其设置为某个值。
但是,您不能在构造函数中使用该循环,因为您需要在这两个线程之间共享完全构造的对象。
(注意:在这种情况下,您需要将字段setting
设置为 volatile ,以使更改对第二个线程可见。)