2010-05-24 2 views
7

Является ли основным методом для написания java-программы?Необходим ли главный метод в программе Java?

Это мой код:

package example; 

public class HelloWorld { 

    public HelloWorld() { 

    } 

    public String getHelloWorld() { 

     return "Hello From Java!"; 
    } 
} 

Это показывает ошибку при компиляции:

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

Это выглядит как ошибка времени выполнения, а не ошибка компиляции. – Bolo

+1

Этот вопрос в Wiki сообщества перечисляет возможные причины этой общей проблемы: http://stackoverflow.com/questions/5407250/causes-of-java-lang-nosuchmethoderror-main-exception-in-thread-main –

ответ

13

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

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

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

Я собирал его и побежал и получил следующий результат:

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

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

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

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

+6

+1 для злоупотребления статическим инициализатором – ewernli

+0

Из того, что я понимаю, современный java больше не допускает такого злоупотребления статическим инициализатором. – emory

+0

@emory Почему основной метод предпочтительнее? Потому что статические инициализаторы не предназначены для такого рода вещей? – Abdul

2

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

+0

Однако веб-приложения обычно указывают другой метод как точку входа в Java EE. –

9

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

2

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

2

Причина, по которой вы получаете это сообщение об ошибке, заключается в том, что вы пытаетесь запустить класс с использованием 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!"; 
} 
} 
5

Если вы пытаетесь выполнить класс Java, виртуальная машина будет искать метод main для вызова его. Из CHAPTER 12 Execution в спецификации языка Java:

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

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

+0

«Не все классы нуждаются в основном, только тот, который служит« точкой входа »для исполнения». +1 Для упоминания, это то, что новички часто ошибаются. – helpermethod

0

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

0

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

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

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

исх: Java Understanding Java main method on logic

Смежные вопросы