Pergunta

Às vezes eu vejo

try {

} catch(Throwable e) {

}

E às vezes

try {

} catch(Exception e) {

}

Qual é a diferença

Foi útil?

Solução

Pegando Throwable Inclui coisas que subclasse Error. Geralmente, você não deve fazer isso, exceto talvez no nível mais alto "Catch All" de um tópico em que deseja registrar ou lidar com absolutamente tudo o que pode dar errado. Seria mais típico em um aplicativo do tipo estrutura (por exemplo, um servidor de aplicativos ou uma estrutura de teste) onde pode estar executando código desconhecido e não deve ser afetado por nada Isso dá errado com esse código, tanto quanto possível.

Outras dicas

O primeiro captura todas as subclasses de Throwable (isso inclui Exception e Error), o segundo captura todas as subclasses de Exception.

Error é programaticamente irrecuperável de alguma forma e geralmente não deve ser capturado, exceto para fins de registro (que passa novamente). Exception é programaticamente recuperável. Sua subclasse RuntimeException Indica um erro de programação e geralmente não deve ser capturado também.

Throwable é super classe de Exception assim como Error. Em casos normais, devemos sempre capturar subclasses de Exception, para que a causa raiz não se perca.

Apenas casos especiais em que você vê a possibilidade de as coisas dão errado que não estão no controle do seu código Java, você deve pegar Error ou Throwable.

Lembro -me de pegar o Throwable para sinalizar que uma biblioteca nativa não está carregada.

Thowable pega realmente tudo, mesmo threaddeath, que é jogado por padrão para interromper um tópico do agora depreciado Thread.stop() método. Então, pegando Throwable Você pode ter certeza de que nunca deixará o bloco de tentativa sem pelo menos passar pelo seu bloco de captura, mas deve estar preparado para lidar com OutOfMemoryError e InternalError ou StackOverflowError.

Pegando Throwable é mais útil para loops de servidor externo que delegam todos os tipos de solicitações ao código externo, mas podem nunca terminam para manter o serviço vivo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top