Descubrí formas de terminar (apagar o detener) mis programas Java. Encontré dos soluciones para ello.
usando return;
Cuando quiero salir o terminar la ejecución de mi programa, agrego esto.usando System.exit () ;
A veces lo usé. Leí sobre Sytem.exit () en esta pregunta .
Entonces, sé un poco sobre ambos. Pero todavía estoy confundido sobre cómo funcionan realmente. Por favor, consulte los siguientes códigos ...
public class Testing {
public static void main(String... str) {
System.out.println(1);
System.exit(0);
System.out.println(2);
return;
}
}
Estoy seguro de que 2 no aparecerá. Me gustaría saber por qué return;u otros códigos pueden escribir debajo de la declaración de System.exit(0);y cuál fue la definición real return;( porque es algo extraño para mí returnsin variables o valores ).

Respuestas:
Llamar
System.exit(0)(o cualquier otro valor para el caso) hace que la máquina virtual Java se cierre, terminando el proceso actual. El parámetro que pase será el valor de retorno que eljavaproceso devolverá al sistema operativo. Puede realizar esta llamada desde cualquier lugar de su programa, y el resultado siempre será el mismo: la JVM termina. Como esto es simplemente llamar a un método estático enSystemclase, el compilador no sabe qué hará y, por lo tanto, no se queja del código inalcanzable.returndeclaración simplemente aborta la ejecución del método actual. Literalmente significa devolver el control al método de llamada . Si el método se declara comovoid(como en su ejemplo), entonces no necesita especificar un valor, ya que debería regresarvoid. Si se declara que el método devuelve un tipo en particular, debe especificar el valor que se devolverá, y este valor debe ser del tipo especificado.returnharía que el programa se cierre solo si está dentro delmainmétodo de la clase principal que se está ejecutando. Si intenta poner código después, el compilador se quejará de un código inalcanzable, por ejemplo:public static void main(String... str) { System.out.println(1); return; System.out.println(2); System.exit(0); }no se compilará con la mayoría de los compiladores, lo que produce un
unreachable codeerror que apunta a la segundaSystem.out.printlnllamada.fuente
fuente
Porque
System.exit()es solo otro método para el compilador. No lee con anticipación y se da cuenta de que todo el programa se cerrará en ese momento (la JVM se cierra). Su sistema operativo o shell puede leer el número entero que se devuelve en elSystem.exit()método. Es estándar para0que signifique "el programa se cerró y todo salió bien" y cualquier otro valor para notificar un error. Depende del desarrollador documentar estos valores de retorno para cualquier usuario.returnpor otro lado, es una palabra clave reservada que el compilador conoce bien.returndevuelve un valor y finaliza la ejecución de la función actual moviéndose hacia arriba en la pila hasta la función que la invocó (si la hubiera). En su código anterior, regresavoidya que no ha proporcionado nada para devolver.fuente
null? ¿No es nada tan vacío? No puede regresarnullen el método con el tipo de retorno comovoid.System.exit () termina la JVM. No se ejecuta nada después de System.exit (). El retorno se usa generalmente para salir de un método. Si el tipo de retorno es nulo, entonces puede usar return; Pero no creo que sea una buena práctica hacerlo en el método principal. No tiene que hacer nada para terminar un programa, a menos que haya un bucle infinito o algún otro flujo de ejecución extraño.
fuente
Así que regresa; realmente no termina su programa java , solo finaliza su función java (void) . Porque en su caso la función es la función principal de su aplicación, return; también terminará la aplicación. Pero el regreso; en su ejemplo es inútil, porque la función terminará directamente después de este retorno de todos modos ...
El System.exit () terminará completamente su programa y cerrará cualquier ventana abierta.
fuente
return;realmente significa que no devuelve nadavoid. Eso es.Está permitido porque el compilador no sabe que la llamada
System.exit(0)terminará elJVM. El compilador solo dará una advertencia: declaración de retorno innecesariafuente
return;se utiliza en un método de tipo de retorno nulo para devolver el control de ejecución a su método padre.fuente