Lançando

Tipos de Dados e Exceções em Java

Jim White

Java Developer

Opções de tratamento

  • Exceções verificadas exigem "tratamento"
    • Tratar exceções de runtime é opcional
  • Duas opções para "tratar"
    • Usar try/catch para capturar a Exception e escrever código para lidar com o problema
    • "Lançar" a exceção
  • Try/catch é a forma preferida de tratar uma exceção
    • Nem sempre possível e às vezes é melhor consolidar o tratamento de exceções
Tipos de Dados e Exceções em Java

Palavra-chave throws

  • Use throws em qualquer método para passar a exceção ao método chamador
    • Em vez de tratar a exceção no método
    • Chamado de "lançar uma exceção" ou "passar a bola"
    • Passar a responsabilidade de tratar a exceção para quem chama
  • Use uma lista de tipos de exceção separados por vírgula após throws
    • Indica quais tipos de exceções o método chamador pode antecipar
public static void someMethod() throws IndexOutOfBoundsException, 
NegativeArraySizeException, NullPointerException {
  // method code
}
Tipos de Dados e Exceções em Java
Exemplo de throws

Try-catch normal para tratar uma Exception

public static void main(String[] args) {
  someMethod();
}
public static void someMethod(){
  try {
    ArrayList<String> games
      = new ArrayList<String>();
    games.add("Monopoly");
    games.add("Chess");
    games.get(3);
  } catch (IndexOutOfBoundsException e) {
    System.out.println(
   "Oops - trying to get non-existent item");
  }
}

Throws para tratar uma Exception

public static void main(String[] args) {
  try {
    someMethod();
  } catch (IndexOutOfBoundsException e) {
    System.out.println(
   "someMethod tried to get non-existent item");
  }
}
public static void someMethod()
      throws IndexOutOfBoundsException {
  ArrayList<String> games
    = new ArrayList<String>();
  games.add("Monopoly");
  games.add("Chess");
  games.get(3);
}
Tipos de Dados e Exceções em Java

Quando usar throws

  • "Passar a bola" ou lançar uma exceção é algo que tentamos evitar
    • A boa prática, em geral, é usar try/catch onde a exceção ocorre
  • Motivos para lançar em vez de usar try/catch incluem:
    • O método onde a exceção ocorre pode não saber como se recuperar
    • Centralizar o tratamento para reduzir código try/catch redundante

Lançar exceções é comum com exceções personalizadas

1 Photo from https://unsplash.com/@philipparosetite
Tipos de Dados e Exceções em Java

Capturar e relançar

  • Uma Exception pode ser "relançada"
    • Um método chamador também usa throws em vez de try/catch
  • Relançar a partir de main fará o app parar

Exceções podem ser relançadas para métodos chamadores

Tipos de Dados e Exceções em Java

Exemplo de relançamento

public class RethrowExample {
    public static void main(String[] args) {
        try {
            method1(0);
        } catch (ArithmeticException e) {
            System.out.println("Oops - tried a bad quotient");
        }
    }
    public static void method1(int divisor) throws ArithmeticException {
        method2(divisor);
    }
    public static void method2 (int divisor) throws ArithmeticException {
        int z = 5/divisor;
        System.out.println(z);
    }
}
Tipos de Dados e Exceções em Java

Vamos praticar!

Tipos de Dados e Exceções em Java

Preparing Video For Download...