【问题标题】:Why not call the static method "main" of a class from another class?为什么不从另一个类调用一个类的静态方法“main”?
【发布时间】:2016-02-25 09:11:15
【问题描述】:

如果我有课:

public class HelloWorld {
  public static String main(String[] args) throws IOException {

 public createMessage(){

 String message = "Hello World!";

  }

 }
 return message; //return of the main static method
}

为什么我不能从另一个班级将 main 称为 HelloWorld.main(args)

String msg = (String) HelloWorld.main(args);

System.out.println(msg);

按照我们调用静态方法的方式。

【问题讨论】:

  • 要调用一个方法,你需要编写编译的代码。
  • 使用main方法做一些工作没有错。它通常用于两种情况(至少对我而言):懒惰或测试你写的东西。通常当我有一个 Java 程序调用另一个 Java 程序时,我将类或 Jar 作为一个新进程运行,这样它就不会共享内存空间、状态(操作系统级别)或全局应用程序变量。如果您从当前 JVM 调用 main 方法,它将使用当前线程或您选择的新线程。但是请不要在同一个 JVM 中执行此操作,除非您只是出于懒惰而这样做。 Stefan 的方法是最好的。

标签: java static-methods main-method


【解决方案1】:

您的代码不是有效的 Java 代码。它不编译。我使用以下步骤修复了编译错误:

  • 将方法main的返回类型更改为void
  • 删除了throws IOException,因为没有抛出异常,编译器会抱怨它
  • 在打开方法createMessage之前关闭方法main
  • 将方法createMessage设为静态,所以可以从静态方法main调用
  • String 作为返回类型添加到方法createMessage
  • 将返回语句移至方法createMessage

这是固定代码:

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println(createMessage());
    }

    public static String createMessage() {
        String message = "Hello World!";
        return message;
    }
}

您可能不想自己从另一个方法调用 main 方法。 main 方法是程序的入口点,这意味着它会被 JVM 自动调用以启动您的程序。在 main 方法中,您打印 hello world 消息。为此,您可以使用方法createMessage 创建消息。该方法执行完毕后,将创建消息传递给方法System.out.println(),这是Java 向控制台输出文本的方法。


您可以通过替换这两行来进一步简化代码

        String message = "Hello World!";
        return message;

用这一行:

        return "Hello World!";

【讨论】:

  • 并从另一个类中调用它,您实例化了一个 HelloWorld 对象?有时当我尝试在 main 下添加一个方法时,IDE 根本无法识别它,Eclipse,它一直提示:语法错误,插入“;”完成 LocalVariableDeclarationStatement
  • (1) 不能将方法声明插入到另一个方法中。这里main也是方法,所以不能在main方法中插入方法声明。 (2) HelloWorld 只有static elements。这意味着没有必要创建它的实例。要从另一个类调用 main 方法,您可以像在您的问题中那样:HelloWorld.main(new String[0]);。它不返回值,而仅将其打印到控制台。你确定要这样做吗?
  • 不客气。但是,您可能想为此提出一个新问题,因为它似乎与这个问题完全不同。
【解决方案2】:

是的,您可以从另一个类调用 main 方法。

但是,您不应该从应用程序内部调用 main() 方法。 main() 方法应该用作应用程序的入口点,以启动程序,而不是用于递归执行该应用程序内的逻辑。如果你有再次需要的功能,你应该把它放在一个单独的方法中。

【讨论】:

  • 感谢您的回答
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-08
  • 2015-02-13
  • 1970-01-01
  • 1970-01-01
  • 2013-10-18
相关资源
最近更新 更多