Java setter and instance -- 改变一个变量

Java setter and instance -- Change a variable

我正在尝试学习如何在创建实例后对其进行更改。我有一个带有循环的构造函数,可以打印我的设置变量。变量设置从 0 开始,循环一直循环直到设置变量不为 0。我显然错误的期望是:

  1. 将创建一个名为对象的新实例。
  2. 循环会 运行 因为设置变量是 0.
  3. 设置变量将更改为 1。
  4. 循环将停止。

我问:

  1. 为什么我的 while 循环不使用更新后的变量 "setting"?
  2. 这是已经实例化的东西的正确方法吗?
  3. 如果有更好的方法请举例说明,我学习一下。

    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);
        }
    }
    

A new instance would be created named object.
The loop would run because the setting variable is 0.

是的。你是对的。

The setting variable would be changed to 1.

这不是真的,因为构造函数中的循环仍然是 运行 并且控制还没有从构造函数返回,因此下一个语句 object.setSetting(1); 没有被执行。

您可以通过创建两个线程来实现。一个将循环直到变量为 0,另一个将其设置为某个值。 但是,您不能在构造函数中使用该循环,因为您需要在这两个线程之间共享完全构建的 object 。 (注意:在这种情况下,您需要将字段 setting 设置为 volatile 以使更改对第二个线程可见)。