java中的非静态全局变量

时间:2016-05-17 01:14:12

标签: java static

有没有办法创建一个我可以在A类中改变的变量,这些变化会影响另一个班级B会发生什么。希望你理解。

这样的事情:

class A{
public int var = 0;

}

并使用变量var的值,如下所示:

class B{
if(var == 0)
   {
    System.out.println("right now, var is equal 0");
   }
else if(var == 1)
   {
    System.out.println("right now, var is equal 1");
   }
}

另外正如您所看到的,var不能是静态的,因为我需要在app运行期间更改它的值。

3 个答案:

答案 0 :(得分:1)

我会通过在A类中引用B类来实现它,这样A也可以在需要时更改B.例如:

bx_xticks = bx.get_xticks()
bx_xticklabels = [label.get_text() for label in bx.get_xticklabels()]
cx.set_yticks(bx_xticks)
cx.set_yticklabels(bx_xticklabels)

答案 1 :(得分:1)

您可以使用观察者观察到的模式。

public class A extends Observable {

    private int var = 0;

    public void setVar(int val) {
        this.var = val;
        notifyObservers();
    }

}

public class B implements Observer {

    public void init(A a) {
        a.addObserver(this);
    }

    @Override
    public void onUpdate(Observable obs, Object arg) {
        // Do something when A is updated
        if(var == 0) System.out.println("right now, var is equal 0");
        else if(var == 1) System.out.println("right now, var is equal 1");
    }

}

它的工作方式是A变为Observable,这意味着当A中的某些内容发生变化时,其他类可以更新(A通知其他类打电话给notifyObservers())。然后使用onUpdate()(此处为Observable)作为第一个参数调用观察者中的A方法。如果您使用notifyObservers()参数调用Object,则Object中的onUpdate()参数将使用该值。

以下是控制流程:

答:setVar - >答:notifyObservers - > B:onUpdate

答案 2 :(得分:0)

虽然其他答案建议的观察者模式实际上是一种更清晰的方法,但鉴于OP似乎甚至没有正确理解Java作为OOP的基本概念(例如对象实例是什么),我相信他在寻找什么for是更基本的东西,它是对另一个对象的引用:

class A {
    private int value = 0;

    // getters and setters 
}

class B {
    private A a;

    // using constructor to have object reference populated
    // is only ONE OF THE WAYS
    public B(A a) {
        this.a = a;
    }

    public void foo() {
        System.out.println("my referred A value " + this.a.getValue();
    }
}

当然你需要正确构建它们。代码中的某处:

A a = new A();
B b = new B(a);
b.foo();
a.setValue(100);
b.foo();