¿Por qué main () en java void?

En el caso de los lenguajes con una syntax 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 progtwig Java no devuelve ningún valor al sistema operativo?

El método main() debe tener un tipo de retorno void . De la Especificación del lenguaje Java en “Ejecución – Encendido de la máquina virtual” ( §12.1.4 ):

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

Continúa para describir cuándo sale un progtwig en “Ejecución – Salida del progtwig” ( §12.8 ):

Un progtwig termina toda su actividad y se cierra cuando ocurre una de estas dos cosas:

  • Todos los hilos que no son hilos daemon terminan.
  • Algunos subprocesos invocan el método de exit de clase Runtime o clase System y la operación de salida no está prohibida por el administrador de seguridad.

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

  • System.exit(int status) – Equivalente a Runtime.getRuntime().exit(status)
  • Runtime.exit(int status) : finaliza la JVM en ejecución iniciando su secuencia de apagado (ejecute todos los ganchos de cierre registrados y los finalizadores no invocados , si es necesario). Una vez hecho esto, la JVM se detiene.
  • Runtime.halt(int status) : termina a la fuerza la JVM actualmente en ejecución.

De los tres, System.exit() es la forma convencional y más conveniente de finalizar la JVM.

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

Realce:

Por cierto, esto se considera un estilo malo en C y C ++ solo porque es la firma incorrecta para main, no por ninguna razón universal independiente de los lenguajes de progtwigción. Es una de esas cosas que realmente no se supone que funcione, pero que podrían afectar a su implementación.

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

escrito por

http://www.designacourse.com La forma más fácil de entrenar a cualquiera … en cualquier lugar. Chris Smith – Desarrollador de software principal / Entrenador técnico MindIQ Corporation

El motivo por el que el método main ha sido void como tipo de retorno es que una vez que termina el main , no significa necesariamente que haya terminado todo el progtwig. Si main genera nuevos hilos, estos hilos pueden mantener el progtwig en ejecución. El tipo de retorno 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 hilo Swing, y luego termina main … pero el progtwig todavía se está ejecutando.

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.