Este post ha sido probado por nuestros especialistas así garantizamos la veracidad de este ensayo.
Solución:
System.exit()
se puede usar para ejecutar ganchos de apagado antes de que el programa se cierre. Esta es una forma conveniente de manejar el apagado en programas más grandes, donde todas las partes del programa no pueden (y no deben) estar al tanto unas de otras. Entonces, si alguien quiere dejar de fumar, simplemente puede llamar System.exit()
y los ganchos de apagado (si están configurados correctamente) se encargan de realizar todas las ceremonias de apagado necesarias, como cerrar archivos, liberar recursos, etc.
“Este método nunca regresa normalmente”. significa simplemente que el método no regresará; una vez que un hilo va allí, no volverá.
Otra forma, quizás más común, de salir de un programa es simplemente llegar al final del main
método. Pero si hay subprocesos que no sean daemon en ejecución, no se cerrarán y, por lo tanto, la JVM no se cerrará. Por lo tanto, si tiene subprocesos no daemon, necesita algún otro medio (además de los ganchos de apagado) para cerrar todos los subprocesos no daemon y liberar otros recursos. Si no hay otros subprocesos que no sean daemon, al regresar de main
apagará la JVM y llamará a los ganchos de apagado.
Por alguna razón, los ganchos de apagado parecen ser un mecanismo infravalorado e incomprendido, y la gente está reinventando la rueda con todo tipo de trucos personalizados patentados para cerrar sus programas. Recomendaría el uso de ganchos de apagado; todo está allí en el tiempo de ejecución estándar que usará de todos modos.
En ese caso, no es necesario. No se habrán iniciado subprocesos adicionales, no está cambiando el código de salida (que por defecto es 0), básicamente no tiene sentido.
Cuando los documentos dicen que el método nunca regresa normalmente, significa que la siguiente línea de código es efectivamente inalcanzable, aunque el compilador no lo sabe:
System.exit(0);
System.out.println("This line will never be reached");
Se lanzará una excepción o la VM terminará antes de regresar. Nunca “simplemente volverá”.
Es muy raro que valga la pena llamar System.exit()
YO ME. Puede tener sentido si está escribiendo una herramienta de línea de comandos y desea indicar un error a través del código de salida en lugar de simplemente lanzar una excepción… pero no puedo recordar la última vez que lo usé en el código de producción normal. .
El método nunca regresa porque es el fin del mundo y ninguno de sus códigos se ejecutará a continuación.
Su aplicación, en su ejemplo, saldría de todos modos en el mismo lugar del código, pero, si usa System.exit. tiene la opción de devolver un código personalizado al entorno, como, digamos
System.exit(42);
¿Quién va a hacer uso de su código de salida? Un script que llamó a la aplicación. Funciona en Windows, Unix y todos los demás entornos de secuencias de comandos.
¿Por qué devolver un código? Para decir cosas como “No lo logré”, “La base de datos no respondió”.
Para ver cómo obtener el valor de un código de salida y usarlo en un script de shell de Unix o en un script de cmd de Windows, puede consultar esta respuesta en este sitio
Comentarios y valoraciones
Finalizando este artículo puedes encontrar las críticas de otros sys admins, tú además tienes la libertad de mostrar el tuyo si lo deseas.