DEV Community

Java Efetivo (livro)
Java Efetivo (livro)

Posted on

1

Item 72: Priorize o uso das exceções padrões

1. Importância da reutilização de exceções padrão

  • Exceções padrão tornam o código mais fácil de entender e familiar para outros programadores.
  • Melhoram a leitura e o aprendizado da API.
  • Reduzem o consumo de memória e o tempo de carregamento de classes.

2. Exceções padrão mais reutilizadas e seus usos típicos

  • IllegalArgumentException:
  • Usada quando um parâmetro possui um valor inadequado.

Exemplo:

public void setRepeatCount(int count) {
    if (count < 0) {
        throw new IllegalArgumentException("Count cannot be negative");
    }
    this.count = count;
}

Enter fullscreen mode Exit fullscreen mode

IllegalStateException:

  • Lançada quando o estado do objeto não permite a operação.

Exemplo:

public void start() {
    if (started) {
        throw new IllegalStateException("Already started");
    }
    started = true;
}

Enter fullscreen mode Exit fullscreen mode

NullPointerException:

  • Usada quando um parâmetro nulo é proibido.

Exemplo:

public void setName(String name) {
    if (name == null) {
        throw new NullPointerException("Name cannot be null");
    }
    this.name = name;
}

Enter fullscreen mode Exit fullscreen mode

IndexOutOfBoundsException:
Usada para índices fora do intervalo permitido.

Exemplo:

public int getElement(int index) {
    if (index < 0 || index >= size) {
        throw new IndexOutOfBoundsException("Index out of range");
    }
    return elements[index];
}

Enter fullscreen mode Exit fullscreen mode

ConcurrentModificationException:

  • Lançada ao detectar uma modificação concorrente em objetos projetados para uso por uma única thread.

Exemplo:

for (String item : list) {
    list.remove(item); // Pode lançar ConcurrentModificationException
}

Enter fullscreen mode Exit fullscreen mode

UnsupportedOperationException:

  • Lançada quando uma operação não é suportada pelo objeto.

Exemplo:

List<String> immutableList = Collections.unmodifiableList(new ArrayList<>());
immutableList.add("item"); // Lança UnsupportedOperationException

Enter fullscreen mode Exit fullscreen mode

3. Boas práticas ao usar exceções padrão

  • Não reutilize superclasses gerais como Exception, RuntimeException, Throwable ou Error diretamente.
  • Escolha a exceção com base em suas semânticas documentadas.
  • Use subclasses personalizadas de exceções padrão apenas quando necessário.

4. Decisão entre exceções

  • Em situações ambíguas, siga estas diretrizes:
  • Use IllegalStateException se a operação falhou devido ao estado do objeto.
  • Use IllegalArgumentException se a falha foi causada por um argumento inválido.

Exemplo:

  • Um método para distribuir cartas pode lançar IllegalArgumentException se o tamanho da mão for inválido ou IllegalStateException se o baralho não tiver cartas suficientes.

5. Outras exceções reutilizáveis

  • ArithmeticException e NumberFormatException podem ser usadas em contextos de operações matemáticas e conversões de números.

Exemplo:

public int divide(int numerator, int denominator) {
    if (denominator == 0) {
        throw new ArithmeticException("Division by zero");
    }
    return numerator / denominator;
}

Enter fullscreen mode Exit fullscreen mode

Image description

Conclusão
Priorize o uso de exceções padrão sempre que possível. Elas tornam o código mais claro, eficiente e consistente com as práticas da linguagem Java.

Hostinger image

Get n8n VPS hosting 3x cheaper than a cloud solution

Get fast, easy, secure n8n VPS hosting from $4.99/mo at Hostinger. Automate any workflow using a pre-installed n8n application and no-code customization.

Start now

Top comments (1)

Collapse
 
igventurelli profile image
Igor Venturelli • Edited

Gostei bastante do item abordado e concordo em partes, mas na contramão, algumas ferramentas de SAST como sonarqube por exemplo, reclamam se você usar exceções nativas.

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay