2010-05-24 14 views
7

¿Es el método principal necesario para escribir un programa Java?¿Es necesario el método Principal en un programa Java?

Este es mi código:

package example; 

public class HelloWorld { 

    public HelloWorld() { 

    } 

    public String getHelloWorld() { 

     return "Hello From Java!"; 
    } 
} 

Se muestra un error en la compilación:

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

Esto parece un error de ejecución, no un error de compilación. – Bolo

+1

Esta pregunta de Community Wiki enumera las posibles causas de este problema común: http://stackoverflow.com/questions/5407250/causes-of-java-lang-nosuchmethoderror-main-exception-in-thread-main –

Respuesta

13

El método principal no es necesario en los programas de Java. Como han señalado otros, las aplicaciones web no usan el método principal.

Ni siquiera es necesario en aplicaciones independientes.Considere

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

compilé y corrí y obtuvieron los siguientes resultados:

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

Para aplicaciones independientes que hay que o bien tienen

  1. un método principal o
  2. un inicializador estático.

Principal es preferido.

+6

+1 por abusar del inicializador estático – ewernli

+0

Por lo que entiendo, Java moderno ya no permite este abuso del inicializador estático. – emory

+0

@emory ¿por qué se prefiere el método principal? ¿Porque los inicializadores estáticos no son para este tipo de cosas? – Abdul

2

No, no es necesario para, por ejemplo, aplicaciones web. No utilizan un método main(), pero si está probando o ejecutando una aplicación independiente, para saber qué resultado espera, puede necesitar un método main().

+0

Sin embargo, las aplicaciones web típicamente especifica otro método como punto de entrada en Java EE. –

9

El método main es el punto de entrada predeterminado para un programa. Si no define uno, y luego intenta ejecutar el jar producido, esto es lo que verá. Si no está tratando de producir un programa que necesita iniciarse de manera independiente, no lo necesitará, por ejemplo, un archivo al que se haga referencia en otros programas o en un sitio web.

2

Las aplicaciones autónomas requieren main, porque es entry-point. ¿Cómo sabrá JVM dónde comenzar el programa?

2

La razón por la que aparece este mensaje de error es porque está intentando ejecutar una clase usando java (java.exe en Windows) y está esperando encontrar un método main().

Este método no es necesario como tal, pero puede formar un punto de entrada donde se inicia una aplicación. Puede volver a escribir la clase de la siguiente manera para lograr el resultado que buscaba:

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

Si intenta ejecutar una clase Java, la JVM buscará un método main para invocarlo. Desde el CHAPTER 12 Execution de la especificación del lenguaje Java:

máquina virtual de Java se inicia mediante la carga de una clase especificada y después de invocar el método main en esta clase especificada. La sección §12.1 describe los pasos de carga, vinculación e inicialización implicados en la ejecución de main, como una introducción a los conceptos de este capítulo. Las secciones adicionales especifican los detalles de la carga (§12.2), que une (§12.3), y la inicialización (§12.4).

No todas las clases necesitan un main, solo el que sirve como "punto de entrada" para la ejecución.

+0

"No todas las clases necesitan una principal, solo la que sirve como" punto de entrada "para la ejecución". +1 Por mencionar, esto es algo que los principiantes a menudo se equivocan. – helpermethod

0

Su aplicación o programa Java (no todas las clases) necesita al menos un método principal para ejecutarlo. Y el que tienes no es un error de compilación sino un error de tiempo de ejecución.

0

"Cuando guarda programa con el mismo nombre que el nombre de clase que contiene el método main(), en el momento de la ejecución la JVM creará un objeto de esa clase y con ese objeto JVM llamará a main() metod como object.main().

Así que si falta el método main() (tampoco falta el inicializador estático), arrojará una excepción. "

Para la aplicación web misma explicación que la anterior.

ref: Java Understanding Java main method on logic

Cuestiones relacionadas