【问题标题】:Java different instances of a classJava 类的不同实例
【发布时间】:2017-02-08 22:07:40
【问题描述】:

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

我有三个主类,第一个是初始化和设置方法的主类(main)。然后我有一个数据库类,它将数据从数据库中提取到代码中(初始化)。第三,我有一个处理 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();
    }
}

这是初始化类:

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

提前致谢。

【问题讨论】:

  • 好吧,你为什么要使用单独的实例?
  • 您可以通过构造函数将创建的init实例传递给访问器,也可以作为tryAccess()方法的参数传递,因此您只有一个Init实例。如果需要跨实例访问消息,您也可以将消息声明为静态变量。

标签: java class variables


【解决方案1】:

您有太多 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();
    }
}

【讨论】:

  • 哦,哇,这比我想象的要简单得多,谢谢。 :)
  • @Nightfortress:理解任何时候你使用new 关键字,你都在创建一个新的独立实例。有时你需要数一数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-04
  • 1970-01-01
  • 2021-07-18
  • 2013-06-14
相关资源
最近更新 更多