Erros e Exceções

Tipos de Dados e Exceções em Java

Jim White

Java Developer

Exceções vs Errors

  • Error é um problema grave
  • Aplicações não conseguem tratar nem se recuperar de errors
    • Errors fazem a aplicação "cair" ou parar
    • Exemplo: falta de memória é um error em Java
  • Aplicações conseguem tratar e se recuperar de exceções
    • Tentar acessar elementos fora do tamanho do array é uma exceção.
Tipos de Dados e Exceções em Java
Exemplo de Error
import java.util.*;

public class CauseOutOfMemory {
    public static void main(String[] args) {
        List<Long> numbers = new ArrayList<Long>();
        long counter = 0;
        while (true) {
            numbers.add(counter);
            counter++;
        }
    }
}
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at java.base/java.lang.Long.valueOf(Long.java:1204)
    at foo/exceptions.CauseOutOfMemory.main(CauseOutOfMemory.java:12)
Tipos de Dados e Exceções em Java

Dois tipos de exceções

Checked Exception Runtime ("unchecked") Exception
Require handling Yes No
General cause Things outside our control Our programming mistakes
Recovery Can usually recover when anticipated Usually unrecoverable
Recovery mechanism try/catch or throws Best to code carefully to avoid them
Example exception File not found Array index out of bounds
Tipos de Dados e Exceções em Java

Checked e Runtime exceptions

  • Subclasses de Exception que não são subclasses de RuntimeException são checked exceptions
    • Precisam ser tratadas
    • Ex: arquivo não encontrado (FileNotFoundException)
  • RuntimeException é a superclasse de todas as unchecked exceptions
    • Não exigem tratamento
    • Ex: acessar um índice de array que não existe (IndexOutOfBoundsException)
    • Ex: tentar dividir por zero (ArithmeticException)
Tipos de Dados e Exceções em Java

RuntimeException

Subclass de RuntimeException Quando é lançada
ArithmeticException Cálculos inválidos, como dividir por 0
IndexOutOfBoundsException Índice usado em array, String etc. fora do intervalo
NegativeArraySizeException Tentar criar um array com tamanho negativo
int y = 5/0; // Código que causa ArithmeticException
int[] list = new int[-1];  // Código que causa NegativeArraySizeException
Exception in thread "main" java.lang.ArithmeticException: / by zero
Exception in thread "main" java.lang.NegativeArraySizeException: -1
1 See https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/RuntimeException.html
Tipos de Dados e Exceções em Java

Exceção "Checked"

public class LoadClass {
    public static void main(String[] args) {
        Class myClass = Class.forName("com.mysql.Driver");
    }
}
LoadClass.java:3: error: unreported exception ClassNotFoundException; 
must be caught or declared to be thrown
                Class myClass = Class.forName("com.mysql.Driver");
                                             ^
1 error
1 See https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/Exception.html
Tipos de Dados e Exceções em Java

Vamos praticar!

Tipos de Dados e Exceções em Java

Preparing Video For Download...