Um guia para System.exit ()
1. Visão geral
Neste tutorial, daremos uma olhada no queSystem.exit significa em Java.
Veremos seus objetivos, onde usar e como usá-lo. Também veremos qual é a diferença em invocá-lo com códigos de status diferentes.
2. O que éSystem.exit?
System.exit é um métodovoid. É necessário um código de saída, que é transmitido para o script ou programa de chamada.
Saindo com um código dezero means a normal exit:
System.exit(0);
Podemos passar qualquer número inteiro como argumento para o método A non-zero status code is considered as an abnormal exit.
Chamar o métodoSystem.exit encerra a JVM atualmente em execução e sai do programa. Este método não retorna normalmente.
Isso significa quethe subsequent code after the System.exit is effectively unreachableand yet, the compiler does not know about it.
System.exit(0);
System.out.println("This line is unreachable");
It’s not a good idea to shut down a program with System.exit(0). Ele nos dá o mesmo resultado de sair do métodomain e também interrompe a execução das linhas subsequentes,also the thread invoking System.exit blocks until the JVM terminates. If a shutdown hook submits a task to this thread, it leads to a deadlock.
3. Por que precisamos disso?
O caso de uso típico paraSystem.exit é quando há uma condição anormal e precisamos sair do programa imediatamente.
Além disso, se tivermos que encerrar o programa de um lugar diferente do método principal,System.exit é uma forma de o conseguir.
4. Quando precisamos disso?
É comum que um script confie nos códigos de saída dos comandos que invoca. Se esse comando for um aplicativo Java,System.exit é útil para enviar este código de saída.
Por exemplo, em vez de lançar uma exceção, podemos retornar um código de saída anormal que pode ser interpretado pelo script de chamada.
Ou podemos usarSystem.exit para invocar quaisquer ganchos de desligamento que registramos. Esses ganchos podem ser configurados para limpar os recursos mantidos e sair com segurança de outros threads não https: //www.example.com/java-daemon-thread [daemon].
5. Um exemplo simples
Neste exemplo, tentamos ler um arquivo e, se existir, imprimimos uma linha a partir dele. Se o arquivo não existir, saímos do programa comSystem.exit do bloco catch.
try {
BufferedReader br = new BufferedReader(new FileReader("file.txt"));
System.out.println(br.readLine());
br.close();
} catch (IOException e) {
System.exit(2);
} finally {
System.out.println("Exiting the program");
}
Aqui, devemos observar que o bloco final não é executado se o arquivo não for encontrado. PorqueSystem.exit nos blocos catch sai da JVM e não permite que o blocofinally seja executado.
6. Escolha de um código de status
Podemos passar qualquer número inteiro como um código de status, mas a prática geral é que aSystem.exit com código de status 0 é normal e os outros são saídas anormais.
Observe que essa é apenas uma “boa prática” e não é uma regra estrita com a qual o compilador se importaria.
Além disso,it’s worth noting when we invoke a Java program from the command-line that the status code is taken into account.
No exemplo a seguir, quando tentamos executarSystemExitExample.class, se ele sair da JVM chamandoSystem.exit com um código de status diferente de zero, o eco a seguir não será impresso.
java SystemExitExample && echo "I will not be printed"
Para tornar nosso programa capaz de se comunicar com outras ferramentas padrão, podemos considerar seguir os códigos padrão que os sistemas relacionados usam para se comunicar.
Por exemplo,UNIX status codes define 128 como o padrão para “argumento inválido para sair”. Portanto, pode ser uma boa ideia usar esse código quando precisarmos que nosso código de status seja comunicado ao sistema operacional. Caso contrário, somos livres para escolher nosso código.
7. Conclusão
Neste tutorial, discutimos comoSystem.exit funciona quando usá-lo e como usá-lo.
É uma boa prática usarexception handling ou declarações de retorno simples para sair de um programa ao trabalhar com servidores de aplicativos e outros aplicativos regulares. O uso do métodoSystem.exit é mais adequado para aplicativos baseados em script ou onde quer que os códigos de status sejam interpretados.
Você pode verificar os exemplos fornecidos neste artigoover on GitHub.