Exceções Java - Try...Catch


Exceções Java

Ao executar o código Java, podem ocorrer diferentes erros: erros de codificação feitos pelo programador, erros devido a entrada errada ou outros imprevistos.

Quando ocorre um erro, o Java normalmente para e gera uma mensagem de erro. O termo técnico para isso é: Java lançará uma exceção (jogará um erro).


Java tente e pegue

A tryinstrução permite que você defina um bloco de código para ser testado quanto a erros enquanto está sendo executado.

A catchinstrução permite definir um bloco de código a ser executado, caso ocorra um erro no bloco try.

As palavras-chave trye catchvêm em pares:

Sintaxe

try {
  //  Block of code to try
}
catch(Exception e) {
  //  Block of code to handle errors
}

Considere o seguinte exemplo:

Isso gerará um erro, porque myNumbers[10] não existe.

public class Main {
  public static void main(String[ ] args) {
    int[] myNumbers = {1, 2, 3};
    System.out.println(myNumbers[10]); // error!
  }
}

A saída será algo assim:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
        at Main.main(Main.java:4)

Se ocorrer um erro, podemos usar try...catchpara capturar o erro e executar algum código para tratá-lo:

Exemplo

public class Main {
  public static void main(String[ ] args) {
    try {
      int[] myNumbers = {1, 2, 3};
      System.out.println(myNumbers[10]);
    } catch (Exception e) {
      System.out.println("Something went wrong.");
    }
  }
}

A saída será:

Something went wrong.

Finalmente

A finallyinstrução permite que você execute código, depois try...catchde , independentemente do resultado:

Exemplo

public class Main {
  public static void main(String[] args) {
    try {
      int[] myNumbers = {1, 2, 3};
      System.out.println(myNumbers[10]);
    } catch (Exception e) {
      System.out.println("Something went wrong.");
    } finally {
      System.out.println("The 'try catch' is finished.");
    }
  }
}

A saída será:

Something went wrong.
The 'try catch' is finished.


A palavra-chave arremesso

A throwinstrução permite que você crie um erro personalizado.

A throwinstrução é usada junto com um tipo de exceção . Existem muitos tipos de exceção disponíveis em Java: ArithmeticException, FileNotFoundException, ArrayIndexOutOfBoundsException, SecurityException, etc:

Exemplo

Lance uma exceção se a idade for inferior a 18 anos (imprima "Acesso negado"). Se a idade for maior de 18 anos, imprima "Acesso concedido":

public class Main {
  static void checkAge(int age) {
    if (age < 18) {
      throw new ArithmeticException("Access denied - You must be at least 18 years old.");
    }
    else {
      System.out.println("Access granted - You are old enough!");
    }
  }

  public static void main(String[] args) {
    checkAge(15); // Set age to 15 (which is below 18...)
  }
}

A saída será:

Exception in thread "main" java.lang.ArithmeticException: Access denied - You must be at least 18 years old.
        at Main.checkAge(Main.java:4)
        at Main.main(Main.java:12)

Se a idade fosse 20, você não receberia uma exceção:

Exemplo

checkAge(20);

A saída será:

Access granted - You are old enough!

Teste-se com exercícios

Exercício:

Insira as partes que faltam para lidar com o erro no código abaixo.

 {
  int[] myNumbers = {1, 2, 3};
  System.out.println(myNumbers[10]);
}  (Exception e) {
  System.out.println("Something went wrong.");
}