1
resposta

Função de Exceção

Olá, bom dia! Tudo bem, pessoal?

Estava assistindo o curso e me surgiu uma dúvida.

Pelo que o Nico falou, é bem comum vermos linhas de código no projeto tal qual:

ArithmeticException ex = new ArithmeticException();
throw ex;

Tendo em vista que a exceção é criada e "jogada". Poderiamos, então, criar uma classe com funções para lidar com exceções? Daí poderiamos descompartimentalizar as exceções do código, só precisariamos chamar a classe, ou a função que irá lidar com todas as exceções, ao invés de inserir em try/catch.

Por exemplo:

Ao invés de um try/catch ou criar a exceção e rodar no meio da função, chamariamos outra função, da seguinte forma:

/*Na classe MaisExceptions*/

private static void exceptionHandler(){
    ArithmeticException ex = new ArithmeticException();
    throw ex;
    NullPointerException ex2 = new NullPointerException();
    throw ex2;    
    /*
    * Ou, talvez:
    * throw new ArithmeticException();
    * throw new NullPointerException();
    */
}
public static void main(String[] args) {
    .
    .
    .
    exceptionHandler();
    .
    .
    .
}

Dessa forma jogaria todos as exceptions na pilha e retornaria

1 resposta

Ola Joao.

Sim é possivel você chamar um método, que por sua vez dentro dele retorna uma exceção.

Mas note que exceções são bloqueantes, ou seja, ao acontecer um lançamento throw, nenhum código depois é executado. Ainda, ele vai encadeando retorno até encontrar um tratamento try/catch, e caso não encontre, continua o retorno para outros métodos até encontrar o método main (e assim, exibir a pilha de erro ao usuário). Isso também acontece, em certa proporção, em sistemas web.

No exemplo que você escreveu exceptionHandler não compila, pois ao fazer throw ex o java sabe que ali é bloqueante e o restante do código é impossível de ser executado, e não deixa essa sintaxe acontecer. Mas voce poderia ter uma sintaxe parecida quando contem alguma condicional.

private static void exceptionHandler(){

   if( algoAcontecer() ) {
      ArithmeticException ex = new ArithmeticException();
      throw ex;
   } else {
      NullPointerException ex2 = new NullPointerException();
      throw ex2;    
   }
}