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í return
sin 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 eljava
proceso 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 enSystem
clase, el compilador no sabe qué hará y, por lo tanto, no se queja del código inalcanzable.return
declaració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.return
haría que el programa se cierre solo si está dentro delmain
mé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 code
error que apunta a la segundaSystem.out.println
llamada.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 para0
que 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.return
por otro lado, es una palabra clave reservada que el compilador conoce bien.return
devuelve 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, regresavoid
ya que no ha proporcionado nada para devolver.fuente
null
? ¿No es nada tan vacío? No puede regresarnull
en 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