Java类的不同实例

时间:2017-02-08 22:07:41

标签: java class variables

为简单起见,我已经复制了我遇到的导致问题的关键元素的错误。

我有三个主要类,第一个是初始化和设置方法(main)的主类。然后我有一个数据库类,它将数据从数据库中提取到代码(Init)中。第三,我有一个GUI类来处理GUI元素(访问者)。

我遇到一个问题,当我调用accessor.print()方法时,我在主类(init.setUp)中在数据库类(accessor.setUp)中初始化的变量(消息)显示为null来自ActionListenerEvent之后的GUI类。

我知道这种情况正在发生,因为同一个类有不同的实例,但我不知道如何解决它。

这是主要课程:

public class main {
    public static void main(String[] args){
        Init init=new Init();
        init.setUp();

        Accessor acc=new Accessor();
        acc.tryAccess();
    }
}

这是init类:

public class Init {
    public String message;

    public void setUp(){
        message="Hello World";
    }
    public void print(){
         System.out.println(message.length());
    }
}

这是访问者类:

public class Accessor {
    public void tryAccess(){
        Init init=new Init();
        init.print();
    }
}

提前致谢。

1 个答案:

答案 0 :(得分:2)

你有太多的Init对象,而另一个与另一对无关。很明显,设置一个对另一个没有影响,为了解决这个问题,你只需要一个实例。变化

public class main {
    public static void main(String[] args){
        Init init=new Init();
        init.setUp();

        Accessor acc=new Accessor();
        acc.tryAccess();
    }
}

public class main {
    public static void main(String[] args){
        Init init=new Init();
        init.setUp();

        Accessor acc=new Accessor(init);  // pass it in!
        acc.tryAccess();
    }
}

然后将参数Init对象传递给Accessor对象中的init字段。

public class Accessor {
    private Init init;

    public Accessor(Init init) {
        this.init = init;  // initialize field
    }

    public void tryAccess(){
        // Init init=new Init();  // *** don't create a new instance!! ***
        init.print();
    }
}