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?
java
system.exit
giri
fonte
fonte
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 chamadaexit(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.
fonte
java MyApp && echo success
, imprimirá "sucesso" se o MyApp tiver um código de saída 0, ou seja, se chamarexit(0)
ou simplesmente chegar ao final do método principal sem erro.Zero
=> Tudo bemPositive
=> 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 externamentekill -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
fonte
kill -15
) geralmente resultam em código de saída128+signal
, mas (além de 9) podem ser manipulados e retornar um código de saída diferente. O-
nokill -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.
Leia mais em Java
Nos sistemas Unix e Linux,
0
para execuções bem-sucedidas e1
ou superior para execuções com falha.fonte
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 .
fonte
exit(0)
geralmente usado para indicar um encerramento bem-sucedido.exit(1)
ouexit(-1)
ou qualquer outro valor diferente de zero indica rescisão malsucedida em geral.fonte
Aqui está a resposta.
fonte
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
fonte
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
fonte
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):
}
arquivo bat:
fonte
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
fonte
}
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
fonte