Java程序中是否必须使用Main方法?

Java程序中是否必须使用Main方法?,java,Java,编写java程序需要主要方法吗 这是我的代码: package example; public class HelloWorld { public HelloWorld() { } public String getHelloWorld() { return "Hello From Java!"; } } 它显示了编译时的错误: java.lang.NoSuchMethodError: main Exception in thread

编写java程序需要主要方法吗

这是我的代码:

package example;

public class HelloWorld {

    public HelloWorld() {

    }

    public String getHelloWorld() {

        return "Hello From Java!";
    }
}
它显示了编译时的错误:

java.lang.NoSuchMethodError: main
Exception in thread "main"

不需要,例如web应用程序不需要它。它们不使用
main()
方法,但是如果您正在测试或运行一个独立的应用程序,为了了解您期望的输出,您可能需要
main()
方法。

main方法是程序的默认入口点。如果您没有定义一个,然后尝试执行生成的jar,这就是您将看到的。如果你不想制作一个需要独立启动的程序,你就不需要它——例如,一个被其他程序引用的jar,或者一个网站。是的,任何可执行程序都需要它。

独立应用程序需要main,因为它是入口点。JVM如何知道从何处启动程序?

之所以会收到此错误消息,是因为您试图使用java(Windows上的java.exe)运行一个类,并且它希望找到main()方法

这种方法本身并不是必需的,但它可以形成启动应用程序的入口点。您可以按如下方式重写您的类,以实现您所寻求的结果:

package example;
public class HelloWorld {

 // Running a class using java invokes this method
 public static void main(String[] args) {
  HelloWorld hw = new HelloWorld();

  System.out.println( hw.getHelloWorld() );
 }

 public HelloWorld() { 
 }

 public String getHelloWorld() {
  return "Hello From Java!";
 }
}

如果您试图执行一个Java类,JVM将寻找一个
main
方法来调用它。从Java语言规范的第页:

Java虚拟机通过加载指定的类,然后在此指定类中调用方法
main
启动。第节概述了执行
main
所涉及的加载、链接和初始化步骤,作为本章概念的介绍。进一步的章节详细说明了加载、链接和初始化


并非所有类都需要
main
,只有作为执行“入口点”的类才需要

java程序中不需要main方法。正如其他人所指出的,web应用程序不使用main方法

独立应用程序甚至不需要它。考虑

class JavaAppWithoutMain
{
    static
    {
    System . out . println ( "Hello World!" ) ;
    }
}
我编译并运行了它,得到了以下结果:

Hello World!
Exception in thread "main" java.lang.NoSuchMethodError: main
对于独立应用程序,您必须

  • 主要方法或方法
  • 静态初始值设定项

  • Main是首选。您的java应用程序或程序(不是每个类)至少需要一个Main方法来运行它。您得到的不是编译错误,而是运行时错误

    “当您使用与包含main()方法的类名相同的名称保存程序时,JVM将在执行时创建该类的对象,并使用该对象调用main()metod作为object.main()

    因此,如果main()方法丢失(静态初始值设定项也丢失),则它将引发异常。“

    对于web应用程序,与上面的解释相同


    ref:

    “并非所有类都需要main,只有作为执行“入口点”的类。”+1请注意,这是初学者经常犯的错误。但是,web应用程序通常在Java EE中指定另一个方法作为入口点。这看起来像是运行时错误,不是编译错误。此社区Wiki问题列出了此常见问题的可能原因:据我所知,现代java不再允许这种滥用静态初始值设定项的行为。@emory为什么首选主方法?因为静态初始值设定项不适用于这类东西?@Abdul我想是的。