Нужен ли метод Main в Java-программе? - PullRequest
9 голосов
/ 24 мая 2010

Нужен ли основной метод для написания Java-программы?

Это мой код:

package example;

public class HelloWorld {

    public HelloWorld() {

    }

    public String getHelloWorld() {

        return "Hello From Java!";
    }
}

При компиляции выдается ошибка:

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

Ответы [ 9 ]

15 голосов
/ 24 мая 2010

Основной метод не требуется в Java-программах. Как отмечали другие, веб-приложения не используют основной метод.

Это не требуется даже в автономных приложениях. Рассмотрим

class JavaAppWithoutMain
{
    static
    {
    System . out . println ( "Hello World!" ) ;
    }
}

Я скомпилировал его, запустил и получил следующий результат:

Hello World!
Exception in thread "main" java.lang.NoSuchMethodError: main

Для автономных приложений вы должны иметь либо

  1. основной метод или
  2. статический инициализатор.

Основной является предпочтительным.

9 голосов
/ 24 мая 2010

Метод main является точкой входа по умолчанию для программы. Если вы не определили один, а затем попытаетесь выполнить созданный jar, это то, что вы увидите. Если вы не пытаетесь создать программу, которую нужно запустить самостоятельно, она вам не понадобится, например, банку, на которую ссылаются другие программы, или веб-сайт.

6 голосов
/ 24 мая 2010

Без метода main ваше приложение не будет иметь точки входа . Да, это требуется для любой исполняемой программы.

5 голосов
/ 24 мая 2010

Если вы попытаетесь выполнить класс Java, JVM будет искать метод main для его вызова.Из ГЛАВА 12 Выполнение спецификации языка Java:

Виртуальная машина Java запускается с загрузки указанного класса и последующего вызова метода main в этом указанном классе.В разделе §12.1 описаны этапы загрузки, компоновки и инициализации, связанные с выполнением main, в качестве введения в концепции этой главы.Дальнейшие разделы определяют детали загрузки (§12.2) , связывания (§12.3) и инициализации (§12.4) .

Не всем классам нужен main, только тот, который служит «точкой входа» для выполнения.

2 голосов
/ 24 мая 2010

Причина, по которой вы получаете это сообщение об ошибке, заключается в том, что вы пытаетесь запустить класс, используя java (java.exe в Windows), и он ожидает найти метод 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!";
 }
}
2 голосов
/ 24 мая 2010

Для автономных приложений требуется main, потому что это точка входа. Как JVM узнает, с чего начать программу?

2 голосов
/ 24 мая 2010

Нет, он не нужен, например, для веб-приложения. Они не используют метод main(), но если вы тестируете или запускаете автономное приложение, чтобы узнать ожидаемый результат, вам может потребоваться метод main().

0 голосов
/ 04 февраля 2017

"Когда вы сохраняете программу с именем, совпадающим с именем класса, содержащим метод main (), во время выполнения JVM создаст объект этого класса, и с этим объектом JVM вызовет метод main () как object.main ().

Таким образом, если метод main () отсутствует (статический инициализатор также отсутствует), он выдаст исключение. "

Для веб-приложения такое же объяснение, как и выше.

ref: Java Основные сведения о главном методе Java в логике

0 голосов
/ 27 июня 2010

Ваше java-приложение или программа (не каждый отдельный класс) нуждается как минимум в одном основном методе для его запуска. И тот, который вы получили, это не ошибка компиляции, а ошибка времени выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...