代码之家  ›  专栏  ›  技术社区  ›  rainer

为什么button对象的行为会因其声明的位置而异

  •  1
  • rainer  · 技术社区  · 7 年前

    我正在用Java编写一个Android应用程序(代号为One)。我进入Java大约3年(Swing、FX,在学习Python一年之后),但不是一名专业程序员。所以,对于周围的专业人士,请容忍我。

    这是我的问题:

    下面是一些代码:

    ,在for循环中实例化一个按钮,可以调用该按钮,也可以通过列表添加该按钮。运行项目时,结果相同:

    for (int i = 0; i < list.size(); i++) {
    
            Button button = new Button("test"); // OR
            Button button = new Button(list.get(i));
            form.add(button);
     };
    

    第二种情况 ,按钮在for循环外部实例化。在这个场景中,当我使用ArrayList或按钮时,结果是不同的。

    public class Test {
    
        private Button button;
    
        public void animation() {       
    
            for (int i = 0; i < list.size(); i++) {
    
                button = new Button("test");        // OR
                button = new Button(list.get(i));
                form.add(button);
            }
        }
    }
    

    项目中还有一个计时器,当我用第二种方法添加一个按钮时,组件会以不协调的方式显示,而当我使用第一种方法时不会出现这种情况。

    我已经解决了编程部分,但是,与项目的直接后果无关,为什么在Java中,在for循环内部或外部的哪一点实例化变量很重要?为什么我使用ArrayList与否很重要?

    对我来说,这毫无意义。这是一个意想不到的java行为,还是在幕后发生了一些我不知道的事情?

    有人能解释吗?

    1 回复  |  直到 7 年前
        1
  •  2
  •   prasad_    7 年前

    这里是我的问题:我已经注意到一个项目可以运行相当长的时间 不同的是,这取决于var是在for循环内启动还是在for循环内启动 开始上课时。

    一些澄清:

    for (int i = 0; i < list.size(); i++) {
    
            Button button = new Button("test"); // OR
            Button button = new Button(list.get(i));
            form.add(button);
     };
    

    考虑声明: Button button = new Button("Press me");

    new Button() 创建一个新的 Button = )到变量 button . 按钮 是类型为的引用变量 按钮 . 和 按钮 引用或指向内存位置。注意上面的代码在一个方法中,也在一个块(for循环)中-so 按钮 是局部变量或方法变量。

    按钮 对象,并将引用(内存位置)存储或添加到 form . 如果for循环运行3次,则有三次 按钮 对象和三个引用。

    情景2:

    private Button button;
    

    上述声明是在声明 按钮 实例变量 Test Text test = new Test() new Test() ),将只有一个变量 按钮 和内存中的一个位置。

    public void animation() {       
    
        for (int i = 0; i < list.size(); i++) {
            button = new Button("test");
            form.add(button);
    

    button = new Button("test"); 在for循环中运行实例变量 按钮 分配了一个新的 对象(新按钮(“测试”))。这指向 变量对于另一个新循环的第二次迭代 按钮 对象被创建并指定给 相同的

    那么 按钮 实例变量的内存位置被一次又一次地重新分配,这就是您看到这种“不协调”行为的原因。

    笔记:

    请看我写的这篇文章: Object References in Java .

    另外,尝试了解Java中的堆内存是什么。