Java setter和instance - 更改变量

时间:2018-04-22 04:18:35

标签: java setter

我试图学习如何在已经创建的实例后更改它。我有一个带有循环的构造函数,可以打印我的设置变量。变量设置从0开始被扰乱,循环循环直到设置变量不为0.我明显错误的期望是:

  1. 将创建一个名为object的新实例。
  2. 循环将运行,因为设置变量为0。
  3. 设置变量将更改为1.
  4. 循环会停止。
  5. 我问:

    1. 为什么我的while循环使用更新的变量"设置"?
    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);
          }
      }
      

1 个答案:

答案 0 :(得分:1)

  

将创建一个名为object的新实例。   
循环将运行,因为设置变量为0。

是。你是对的。

  

设置变量将更改为1.

这不正确,因为构造函数中的循环仍在运行,并且控件未从构造函数返回,因此未执行下一个语句object.setSetting(1);

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