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?
Respuesta
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.
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
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 declararsepublic
,static
yvoid
. 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
Runtime
System
y la operación salidaexit
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):
System.exit(int status)
- Equivalente aRuntime.getRuntime().exit(status)
Runtime.exit(int status)
- Termina la JVM actualmente en ejecución iniciando su secuencia de apagado (ejecute todos los registros shutdown hooks y uninvoked finalizers, si es necesario). Una vez hecho esto, la JVM se detiene.Runtime.halt(int status)
- Finaliza por la fuerza la JVM actualmente en ejecución.
De las tres, System.exit()
es la manera convencional y más conveniente de terminar la JVM.
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.
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
@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(). –
Pete, gracias por clarif. – Max
- 1. Java - public static void main()
- 2. ¿Qué estuvo mal con void main()?
- 3. Usando `void main` en D
- 4. ¿Diferencia entre void main e int main?
- 5. ¿Por qué sizeof (void) == 1?
- 6. Múltiples métodos main() en java
- 7. ¿Por qué usar def main()?
- 8. ¿Por qué int main() {} compila?
- 9. ¿el estándar C++ prohíbe el prototipo void main()?
- 10. En java, ¿se puede renombrar o refactorizar "public static void main"?
- 11. ¿Qué significa "void * (*) (void *)" en C++?
- 12. ¿Por qué Void es una estructura?
- 13. ¿Por qué main no devuelve 0 aquí?
- 14. Por qué son try-catch en main() malo?
- 15. ¿Por qué no hay función main() en vxWorks?
- 16. main() en C, C++, Java, C#
- 17. ¿Por qué start_routine para el retorno pthread_create void * y tomar void *
- 18. Java: ¿por qué imprime nulo?
- 19. ¿Por qué no se define main `main (std :: vector <std::string> args)`?
- 20. java args array en el método main() confusión (verificación nula)
- 21. ¿Qué significa "const void *" en memmove?
- 22. ¿Por qué javascript: void (0) se considera dañino?
- 23. Extendiendo AsyncTask <Void, Void, Void>
- 24. Python: ¿Por qué extends() y append() devuelven None (void)?
- 25. ¿Por qué `boost :: any` es mejor que` void * `?
- 26. no se puede convertir '* void (MyClass :: *) (void *) en void * (*) (void *) en la función pthread_create
- 27. ¿Por qué los applets no necesitan un main()?
- 28. ¿Qué significa esto salir (main())
- 29. ¿Qué funciona antes de main()?
- 30. punteros void en C++
¿En qué idioma 'main' devuelve un valor de coma flotante? –
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