---
title: 'Warum catch ( Exception e ) schlecht ist, und was man dagegen tun kann'
url: 'https://tutego.de/blog/javainsel/2007/12/warum-catch-exception-e-schlecht-ist-und-was-man-dagegen-tun-kann'
markdown: 'https://tutego.de/blog/javainsel/2007/12/warum-catch-exception-e-schlecht-ist-und-was-man-dagegen-tun-kann.md'
date: '2007-12-13'
description: 'Eine ganze Reihe von Java-Methoden lösen eine ganze Reihe von unterschiedlichen Ausnahmen aus: private void setLaf() { try { UIManager.setLookAndFeel( UIManager.getSystemLookAndFeelClassName() ); } catch ( ClassNotFoundException e ) { handle(); } catch ( InstantiationException e …'
taxonomy:
  category:
    - Allgemein
---

# Warum catch ( Exception e ) schlecht ist, und was man dagegen tun kann

![Illustration einer tropischen Insel mit Palmen und einem hohen Berg](https://tutego.de/blog/javainsel/user/themes/tutego/images/insel-cover.jpg)# Java Blog für Programmierer

[Java Blog für Programmierer](https://tutego.de/blog/javainsel/)

## Warum catch ( Exception e ) schlecht ist, und was man dagegen tun kann

13.12.2007 · [Christian Ullenboom](https://tutego.de/blog/javainsel/author/admin/)

Eine ganze Reihe von Java-Methoden lösen eine ganze Reihe von unterschiedlichen Ausnahmen aus:

```java
private void setLaf()

{

 try

 {

 UIManager.setLookAndFeel( UIManager.getSystemLookAndFeelClassName() );

 }

 catch ( ClassNotFoundException e )

 {

 handle();

 }

 catch ( InstantiationException e )

 {

 handle();

 }

 catch ( IllegalAccessException e )

 {

 handle();

 }

 catch ( UnsupportedLookAndFeelException e )

 {

 handle();

 }

}
```

Oftmals befindet sich dann im Quellecode eine Anweisung wie catch ( `Exception` e ), die große Kaskaden von catch-Anweisungen verkleinern soll. (So kann man auch den gleichen Handler verwenden.) Das Problem dabei: Man fängt mehr, als man will, insbesondere wertvolle RuntimeExceptions, die man ungern als checked SQL- oder sonstwas-Exeption vernudelt haben möchte. Wenn ich mir moderne Frameworks, wie Spring oder Java EE 5 anschaue, wird dort ausschließlich mit `RuntimeException` gearbeitet, und die fängt eine catch ( `Exception` e ) ebenfalls brutal ab. Wenn zum Beispiel das Framework aufgrund einer unchecked `Exception` eine Transaktion abbricht, wir diesen Fehler aber schon „weggefangen“ haben, ist das ein echtes Problem.

Ich sehe für eine vernünftige Behandlung mehrere Möglichkeiten:

- Warten auf Java 3000, da dort sicherlich so etwas wie catch ( `IOException`, `SQLException` e ) definiert wird.
- Eine gemeinsame `handle()`-Funktion zu definieren, die man dann aus den catch-Handlern ansteuert.
- Ein catch ( `Exception` e ) und dann ein instanceof Test auf die erwarteten Exceptions mit einer re-thow, wenn der Typ nicht bekannt ist.

Kategorien: [Allgemein](https://tutego.de/blog/javainsel/category/allgemein/)

[← Alle Beiträge](https://tutego.de/blog/javainsel/)

---

## Navigation

- Previous: [Schlechter Quellcode von NeuralBuild (NeuralLimits)](https://tutego.de/blog/javainsel/2007/12/schlechter-quellcode-von-neuralbuild-neurallimits.md)
- Next: [Sehr große Anfrage an den JBuilder](https://tutego.de/blog/javainsel/2007/12/sehr-grose-anfrage-an-den-jbuilder.md)
