Gostaria de saber a diferença entre os seguintes em Java
System.exit(0);
System.exit(-1);
System.exit(1);
Quando devo usar o código acima de maneira apropriada?
Gostaria de saber a diferença entre os seguintes em Java
System.exit(0);
System.exit(-1);
System.exit(1);
Quando devo usar o código acima de maneira apropriada?
Respostas:
O parâmetro de saída deve qualificar se a execução do programa foi boa ou ruim. É uma espécie de hereditariedade de linguagens de programação antigas, onde é útil saber se algo deu errado e o que deu errado.
O código de saída é
0
quando a execução correu bem;1
, -1
, whatever != 0
Quando ocorreu algum erro, você pode usar valores diferentes para diferentes tipos de erros.Se eu estou correto, os códigos de saída costumavam ser apenas números positivos (quero dizer, no UNIX) e de acordo com o intervalo:
1-127
são códigos definidos pelo usuário (gerados por chamada exit(n)
)128-255
são códigos gerados pela terminação devido a diferentes sinais unix como SIGSEGV ou SIGTERMMas não acho que você deva se importar ao codificar em Java, é apenas um pouco de informação. É útil se você planeja fazer com que seus programas interajam com ferramentas padrão.
java MyApp && echo success
, imprimirá "sucesso" se o MyApp tiver um código de saída 0, ou seja, se chamar exit(0)
ou simplesmente chegar ao final do método principal sem erro.
Zero
=> Tudo bem
Positive
=> Algo que eu esperava que poderia dar errado deu errado (linha de comando incorreta, não foi possível encontrar o arquivo, não foi possível conectar ao servidor)
Negative
=> Algo que eu não esperava que deu errado (erro do sistema - exceção imprevista - rescisão forçada externamente kill -9
)
(valores maiores que 128 são realmente negativos, se você os considera binários assinados de 8 bits ou complementam dois)
Há muitos códigos de saída padrão bons aqui
kill -15
) geralmente resultam em código de saída 128+signal
, mas (além de 9) podem ser manipulados e retornar um código de saída diferente. O -
no kill -15
é marca o número como um sinal e não um pid, não faz o negativo do sinal.
System.exit(-1)
e, em seu shell, echo $?
você obtém '255'. É por isso que eu disse que números negativos são erros do sistema, não por causa do '-' no parâmetro kill. Você achou seriamente isso que eu pensei? Mas obrigado por explicar o mecanismo pelo qual o Bash constrói esses códigos.
System.exit(system call)
finaliza a máquina virtual Java atualmente em execução iniciando sua sequência de desligamento. O argumento serve como um código de status .
Por convenção, um código de status diferente de zero indica encerramento anormal.
System.exit(0) or EXIT_SUCCESS; ---> Success
System.exit(1) or EXIT_FAILURE; ---> Exception
System.exit(-1) or EXIT_ERROR; ---> Error
Leia mais em Java
Nos sistemas Unix e Linux, 0
para execuções bem-sucedidas e 1
ou superior para execuções com falha.
EXIT_*
não existe em Java.
Um código de status de saída diferente de zero, geralmente indica finalização anormal. se n != 0
, cabe ao programador aplicar um significado aos vários n's.
Em https://docs.oracle.com/javase/7/docs/api/java/lang/System.html .
exit(0)
geralmente usado para indicar um encerramento bem-sucedido. exit(1)
ou exit(-1)
ou qualquer outro valor diferente de zero indica rescisão malsucedida em geral.
Aqui está a resposta.
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
Uma boa dica é que qualquer código de erro> 255 será convertido para o código de erro% 256. Deve-se ter cuidado especial com isso se estiverem usando um código de erro personalizado> 255 e esperando o código de erro exato na lógica do aplicativo. http://www.tldp.org/LDP/abs/html/exitcodes.html
a diferença dos números colocados em system.exit () é explicada em outras respostas. mas a DIFERENÇA REAL é que System.exit () é um código que é retornado ao processo de chamada. Se o programa estiver sendo chamado pelo sistema operacional, o código de retorno dirá ao sistema operacional que, se system.exit () retornou 0, tudo estava ok, mas se algo não der errado, pode haver alguns manipuladores para isso no processo pai
Como outros respondem 0
significando sucesso, caso contrário.
Se você usar o arquivo bat (janela), isso System.exit(x)
será efetivado.
Código java (myapp):
if (error < 2){
help();
System.exit(-1);
}
else{
doSomthing();
System.exit(0);
}
}
arquivo bat:
java -jar myapp.jar
if %errorlevel% neq 0 exit /b %errorlevel%
rem -- next command if myapp is success --
System.exit (0) por convenção, um código de status diferente de zero indica encerramento anormal.
System.exit (1) - Significa que a finalização não foi bem-sucedida devido a algum erro
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);
}
}
No código acima, quando seu System.exit (0); e quando pressiono o caso 5, ele sai corretamente, mas quando uso System.exit (1); e pressione o caso 5, ele sai com erro e, novamente, quando eu tento o caso 15, sai corretamente por isso, eu sei que, sempre que colocamos algum argumento interno, especifica isso, ele pega o caractere dessa posição, ou seja, se eu colocar (4) que significa pegar o quinto caractere dessa string se for (3), então significa pegar o 4º caractere daquela string inserida