Me gustaría saber la diferencia entre lo siguiente en Java
System.exit(0);
System.exit(-1);
System.exit(1);
¿Cuándo debo usar el código anterior de manera adecuada?
Me gustaría saber la diferencia entre lo siguiente en Java
System.exit(0);
System.exit(-1);
System.exit(1);
¿Cuándo debo usar el código anterior de manera adecuada?
Respuestas:
El parámetro de salida debe calificar si la ejecución del programa fue buena o mala. Es una especie de herencia de lenguajes de programación más antiguos donde es útil saber si algo salió mal y qué salió mal.
El código de salida es
0
cuando la ejecución fue bien;1
, -1
, whatever != 0
Cuando se produjo algún error, puede utilizar valores diferentes para diferentes tipos de errores.Si estoy en lo correcto, los códigos de salida solían ser solo números positivos (quiero decir en UNIX) y según el rango:
1-127
son códigos definidos por el usuario (generados al llamar exit(n)
)128-255
son códigos generados por terminación debido a diferentes señales de unix como SIGSEGV o SIGTERMPero no creo que deba preocuparse mientras codifica en Java, es solo un poco de información. Es útil si planea hacer que sus programas interactúen con herramientas estándar.
java MyApp && echo success
imprimirá "éxito" si MyApp tiene un código de salida de 0, es decir, si llama exit(0)
o simplemente llega al final del método principal sin un error.
Zero
=> Todo bien
Positive
=> Algo que esperaba que pudiera salir mal salió mal (línea de comando incorrecta, no se puede encontrar el archivo, no se pudo conectar al servidor)
Negative
=> Algo que no esperaba en absoluto salió mal (error del sistema - excepción no anticipada - terminación forzada externamente, por ejemplo kill -9
)
(los valores superiores a 128 son en realidad negativos, si los considera como binarios con signo de 8 bits o dos complementarios)
Aquí hay un montón de buenos códigos de salida estándar
kill -15
) a menudo dan como resultado un código de salida 128+signal
, pero (aparte de 9) se pueden manejar y devolver un código de salida diferente. El -
de kill -15
es el número de marcas como una señal y no un pid, no hacen que la negativa de la señal.
System.exit(-1)
y luego en tu caparazón echo $?
obtienes '255'. Es por eso que dije que los números negativos son errores del sistema, no por el '-' en el parámetro kill. ¿En serio pensaste que eso era lo que yo pensaba? Pero gracias por explicar el mecanismo por el cual Bash construye estos códigos.
System.exit(system call)
finaliza la máquina virtual Java actualmente en ejecución iniciando su secuencia de apagado. 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.
System.exit(0) or EXIT_SUCCESS; ---> Success
System.exit(1) or EXIT_FAILURE; ---> Exception
System.exit(-1) or EXIT_ERROR; ---> Error
Leer más en Java
En sistemas Unix y Linux, 0
para ejecuciones exitosas y 1
superiores para ejecuciones fallidas.
EXIT_*
no existe en Java
Un código de estado de salida distinto de cero, generalmente indica una terminación anormal. si n != 0
, depende del programador aplicar un significado a las diversas n.
Desde https://docs.oracle.com/javase/7/docs/api/java/lang/System.html .
exit(0)
generalmente se usa para indicar la terminación exitosa. exit(1)
o exit(-1)
cualquier otro valor distinto de cero indica una terminación fallida en general.
Aquí está la respuesta.
System.exit(0);// normal termination - Successful - zero
System.exit(-1);//Exit with some Error
System.exit(1);//one or any positive integer // exit with some Information message
Un buen truco es que cualquier código de error> 255 se convertirá en el código de error% 256. Se debe tener especial cuidado con esto si están usando un código de error personalizado> 255 y esperan el código de error exacto en la lógica de la aplicación. http://www.tldp.org/LDP/abs/html/exitcodes.html
La diferencia de los números puestos en system.exit () se explica en otras respuestas. pero la DIFERENCIA REAL es que System.exit () es un código que se devuelve al proceso de invocación. Si el sistema operativo invoca el programa, el código de retorno le indicará al sistema operativo que si system.exit () devolvió 0, todo estaba bien, pero si algo salió mal, entonces podría haber algunos controladores para eso en el proceso padre
Como otros responden 0
significando éxito, de lo contrario.
Si utiliza el archivo bat (ventana) System.exit(x)
tendrá efecto.
Código java (myapp):
if (error < 2){
help();
System.exit(-1);
}
else{
doSomthing();
System.exit(0);
}
}
archivo bat:
java -jar myapp.jar
if %errorlevel% neq 0 exit /b %errorlevel%
rem -- next command if myapp is success --
System.exit (0) por convención, un código de estado distinto de cero indica una terminación anormal.
System.exit (1): significa que la terminación no se realizó correctamente debido a algún error
class calc{
public static void main(String args[])
{
int a, b, c;
char ch;
do{
Scanner s=new Scanner(System.in);
System.out.print("1. Addition\n");
System.out.print("2. Substraction\n");
System.out.print("3. Multiplication\n");
System.out.print("4. Division\n");
System.out.print("5. Exit\n\n");
System.out.print("Enter your choice : ");
ch=s.next().charAt(0);
switch (ch)
{
case '1' :
Addition chose1=new Addition();
chose1.add();
break;
case '2' :
Substraction chose2=new Substraction();
chose2.sub();
break;
case '3' :
Multiplication chose3= new Multiplication();
chose3.multi();
break;
case '4' :
Division chose4=new Division();
chose4.divi();
break;
case '5' :
System.exit(0);
break;
default :
System.out.print("wrong choice!!!");
break;
}
System.out.print("\n--------------------------\n");
}while(ch !=5);
}
}
En el código anterior cuando su System.exit (0); y cuando presiono el caso 5 sale correctamente pero cuando uso System.exit (1); y presiono el caso 5 sale con error y nuevamente cuando intento con el caso 15 sale correctamente por esto llegué a saber que, cada vez que ponemos un argumento int dentro, especifica que, toma el carácter de esa posición, es decir, si pongo (4) que significa tomar el 5to carácter de esa cadena si es (3) entonces significa tomar el 4to carácter de esa cadena ingresada