【问题标题】:Where to get non-static object to call his method?在哪里获取非静态对象来调用他的方法?
【发布时间】:2023-04-01 15:50:02
【问题描述】:

关于 JavaFX 类的新手 Q。 Main是JavaFX中的一个main起始类,它没有构造函数(不知道为什么)

Main.java

class Main extends Application {
   Log  log;   // class, not shown here
   Work work;
   @Override
   public void start() // entry point
   {
      log  = new Log("main.log"); // opens log file, need to be non-static
      work = new Work();
   }
}

Work.java

class Work{
     public Work() // constructor
    {
       Main.log.write("Making work object");  // error
       // What is the right method to call one non-static class from another ???
    }

【问题讨论】:

  • 这是JavaFX Application 类吗?
  • 当您调用Main.log 时,log 需要是静态的。您需要创建一个 Main 实例,然后使用它调用日志。
  • 是的,这是 JavaFX 应用程序,NetBean IDE。

标签: java class oop non-static


【解决方案1】:

试试这个

class Main extends Application {
   public static Log  log = new Log("main.log");   // class, not shown here
   Work work;
   public start() // entry point
   {
       work = new Work();
   }
}

那么只有你可以使用

Main.log.write("Making work object");

【讨论】:

    【解决方案2】:

    将日志传递给 Work 实例。

    class Main extends Application {
       Log  log;   // class, not shown here
       Work work;
       public start() // entry point
       {
          log  = new Log("main.log"); // opens log file, need to be non-static
          work = new Work(log);
       }
    }
    

    == Work.java ==

    class Work{
        Log  log;
        public Work(Log log) // constructor
        {
           this.log = log;
           log.write("Making work object");           
        }
    

    【讨论】:

      【解决方案3】:

      您的Log 必须是publicstatic

      只有当某些东西被声明为public时,你才能在另一个类中访问它(我的意思是没有继承)

      只有当某些东西被声明为static时,你才能将它称为Classname.VariableName

      class Main extends Application {
         public static Log  log; // see the change ?   
         ...
         public void start() // this needed a return type
         {
            ...
         }
      }
      

      【讨论】:

      • 日志不能是静态的。它需要构造函数来打开日志文件。
      • @xoid static 对象可以很好地初始化。 ;)
      猜你喜欢
      • 2014-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-03
      • 1970-01-01
      • 1970-01-01
      • 2013-03-20
      相关资源
      最近更新 更多