2009-02-12 24 views
55

En el caso de los lenguajes con una sintaxis similar a C, declaramos que el método main() devuelve un valor int o float (o void). ¿Es posible declarar un tipo de devolución no nulo de main() en Java? Si no, ¿por qué no? ¿Esto significa que un programa Java no devuelve ningún valor al sistema operativo?¿Por qué main() en java void?

+4

¿En qué idioma 'main' devuelve un valor de coma flotante? –

+0

Como indica la respuesta más alta a esta pregunta, hay una razón técnica para esto, por lo que no se basa principalmente en la opinión. – Raedwald

Respuesta

7

Puede devolver un int con System.exit().

Devolver algo que no sea un entero no tiene mucho sentido, ya que el sistema operativo espera un número entero. En caso de que no se devuelva nada, el valor predeterminado es 0, lo que significa que está OK. Otros valores generalmente se utilizan para señalar errores o condiciones especiales.

27

This es una interesante discusión sobre velocityreviews sobre el mismo tema:

Resalte:

Por cierto, esto se considera un mal estilo en C y C++ sólo porque es la mal firma para main , no por ninguna razón universal independiente de los lenguajes de programación. Es una de esas cosas que realmente no se supone que funcione en , pero sí en su implementación.

En Java, la razón por la que el principal retorno es vacío es el hilo. C y C++ fueron ambos diseñados como lenguajes antes de que la técnica de multiprocesamiento fuera ampliamente conocida , y ambos tenían hilos injertados en ellos en una fecha posterior. Java se diseñó desde el principio para ser un entorno multiproceso, y francamente, sería inusual escribir cualquier aplicación Java no trivial que no utilice más de un hilo. Entonces, la idea de que un programa se mueva linealmente desde el principio hasta el final de main está un poco desactualizada.

escrito por

www.designacourse.com La manera más fácil entrenar a cualquier persona en cualquier lugar .... Chris Smith - Plomo Desarrollador de Software/Técnico Entrenador MindIQ Corporación

66

El método main() hecho debe tener un tipo void retorno. Desde el Java Language Specification sobre "Ejecución - Virtual Machine Puesta en Marcha" (§12.1.4):

El método main debe declararse public, static y void. Debe aceptar un único argumento que es una matriz de cadenas.

Se va a describir cuando un programa salidas en "Ejecución - Salir del programa" (§12.8):

un programa termina toda su actividad y salidas cuando una de dos cosas sucede :

  • Todos los hilos que no son hilos daemon terminan.
  • un poco de hilo invoca el método de la clase o tipo de RuntimeSystem y la operación salida exit que no está prohibido por el gerente de seguridad .

En otras palabras, el programa puede salir antes o después de las main acabados Método; un valor de retorno desde main no tendría sentido. Si desea que el programa para devolver un código de estado, llame a uno de los métodos siguientes (tenga en cuenta que los tres métodos nunca regresan normalmente):

De las tres, System.exit() es la manera convencional y más conveniente de terminar la JVM.

22

El motivo del método main que tiene void como tipo de retorno es que una vez que main finaliza, no significa necesariamente que el programa completo haya finalizado. Si main genera nuevos subprocesos, estos subprocesos pueden mantener el programa en ejecución. El tipo de devolución de main no tiene mucho sentido en este punto.

Por ejemplo, esto es muy común en las aplicaciones Swing, donde el método main generalmente inicia una GUI en el subproceso Swing, y luego main termina ... pero el programa todavía se está ejecutando.

+0

Peter, ¿podrías aclararme por mí mismo (actualmente estoy explorando el multihilo de Java) ... ¿Son solo hilos deamon que NO están autorizados a sobrevivir a main()? – Max

+5

@Max: no, el método main() no tiene control sobre JVM. Cuando se inicia JVM, se ejecutará el método main(), pero cuando main() finaliza, no significa que la JVM finaliza. JVM continúa ejecutando todos los hilos hasta que 1) Runtime.exit() se llame OR 2) todos los hilos normales (no daemon) hayan muerto. Los hilos Daemon no cuentan para esta segunda condición. En otras palabras ... si el método main() engendra algunos hilos normales, JVM ** no ** terminará cuando termine main(). Si main() no genera ningún subproceso, JVM terminará.Si main() solo genera hilos daemon, JVM también terminará cuando termine main(). –

+0

Pete, gracias por clarif. – Max

Cuestiones relacionadas