que - System.exit de Java(0); vs C++ return 0;
system.exit() java (5)
Cuando aprendamos C ++ en la escuela, nuestro profesor nos dirá que escribamos
return 0;
en la última línea de códigos en la función principal y se considera una buena práctica de programación.
Eso es debatible. ¿Te ha dicho también que return 0;
¿Está implícito dentro de main
? Personalmente, nunca escribo el return 0;
redundante return 0;
Dentro de main
, y casi nunca lo veo en el código de otras personas tampoco.
Cuando aprendamos C ++ en la escuela, nuestro profesor nos dirá que escribamos return 0;
en la última línea de códigos en la función principal y se considera una buena práctica de programación.
En Java, me doy cuenta de que algunas personas escriben System.exit(0);
En la última línea del método principal.
Sin embargo, en C ++, si uso exit(0);
Mi profesor me penaliza, porque (en la escuela) por la programación de procedimientos, se espera que dejemos que el programa fluya hasta el final de main y que el programa se detenga de forma natural.
Mi pregunta : Es el System.exit(0);
de System.exit(0);
similar al return 0;
C ++ return 0;
? (O es similar a la exit(0)
C ++ exit(0)
)
¿Es una mala práctica usar System.exit(0)
en java cuando no es necesario (es decir, escribirlo en la última línea del método principal)?
El sistema operativo original Unix se basaba en gran medida en los scripts de línea de comandos que usaban y combinaban muchos programas pequeños. Se utilizó un código de retorno de un programa para el flujo de control. El código de retorno 0 significa que todo está bien, no cero para errores.
Así que el C int main(...)
es un mapeo directo, y return 0;
al final apropiado. Una salida allí es como lanzar una excepción, evitando cualquier devolución. También desactiva la llamada al main desde otro programa.
En Java public void main(...)
esto se simplificó, y 0 está implícito. System.exit(0);
tiene la misma mala suposición de que ningún otro programa llama main
. Aunque en general void
reflejó el uso del 99%, ahora System.exit(...);
Es inevitable para un código de error distinto de cero.
Esto también debe ser visto como una decisión de diseño más general; C depende en gran medida de los códigos de retorno de las funciones, lo que hace que el flujo de control sea difícil o propenso a errores, por lo que Java introdujo el uso de Excepciones como posible flujo de control obligatorio, con una captura de libre elección. Hoy en día, una alternativa a System.exit(13)
podría ser throw new IllegalArgumentException("Unlucky");
.
En Java System.exit (0), System.exit (1), System.exit (-1) se usa para saber si la ejecución del programa fue buena o mala. 0
se usa cuando la ejecución fue bien. 1, -1, whatever != 0
cuando se produjo algún error, puede usar diferentes valores para diferentes tipos de errores.
También puedes decirlo así:
0 significa todo bien
1 significa que algo que esperaba salir mal salió mal
-1 significa algo que no esperaba que saliera mal
El Java Doc dice:
El argumento sirve como un código de estado; por convención, un código de estado distinto de cero indica una terminación anormal.
Es el System.exit de Java (0); similar al retorno 0 de C ++; ?
Sí, ambos son similares.
¿Es una mala práctica usar System.exit (0) en java cuando no es necesario?
No diría que es una mala práctica, pero sí, debes saber cuándo usarlo y dónde. Puede usarlo para lanzar un error para una herramienta de línea de comandos a través de un código de salida en lugar de lanzar una excepción. System.exit(0)
termina la JVM, por lo que debe estar muy seguro de dónde usarlo.
Un ejemplo para eso:
try {
runTheWholeApplication();
System.exit(0); // Signifying the normal end of your program
} catch (Throwable t) {
reportErrorSomehow(t);
System.exit(1); // Signifying that there is an error
}
Sí. System.exit(0);
de Java System.exit(0);
es un análogo directo porque el método main
prototípico de Java se define como
public static void main(String[] args) {
}
Entonces, literalmente, no puede return
un int
(aunque simplemente puede return;
). En C ++ puedes exit(0);
que también es equivalente.
System.exit(0)
Java es como la exit(0)
C ++ en eso
- Termina el proceso
- Se puede llamar desde cualquier parte del programa.
El último punto lo convierte en una construcción de flujo de control "no estructurada" que los tipos académicos tienden a desaprobar. (En este caso, tienen una buena razón: si una función informa un error a través de una excepción (o un código de retorno anticuado), es posible que la persona que llama se recupere del error, pero la exit
quema ese puente. Por supuesto , a veces los errores deben ser tratados como fatales.)
En C ++, el return 0
es equivalente a exit(0)
si está en la función main
. (En otras funciones, no significa nada especial.)
La diferencia relevante entre C ++ y Java aquí es el tipo de retorno de main
.
- En C ++,
main
debe devolverint
. Normalmente, esto significaría que debe tener una declaración dereturn
, pero el estándar de C ++ hace que el casomain
sea un caso especial con unareturn 0;
implícitareturn 0;
Como el final si no escribes uno. - En Java,
main
debe devolvervoid
.
En C ++, es común escribir declaraciones de return
en main
, aunque técnicamente es redundante, para una consistencia estilística con todas las otras funciones no void
en su programa.
En Java, no puede return
el código de salida de main
porque es una función void
. Por lo tanto, si desea especificar explícitamente un código de salida, debe usar System.exit
.
No es incorrecto finalizar todas las funciones main
Java con System.exit(0)
, pero no es idiomático hacerlo a menos que tengas una estructura como
public static void main(String[] args) {
try {
//... do the work
System.exit(0);
} catch (Throwable t) {
//... report the error
System.exit(1);
}
}