Exceptions throw

Status
Nicht offen für weitere Antworten.

PollerJava

Top Contributor
Hállo,

lese gerade ein Buch über C++ und da hab ich folgendes gelesen:

Code:
try {
...
throw "Fehler in der ersten irgendwas";


...

throw "Fehler irgendwo unten";
}
catch (...)
{
}


kann ich das in Java auch machen, gesehen hab ich das in Java noch nie, proktisch wärs aber doch,

lg
 
gesehen hab ich das in Java noch nie, proktisch wärs aber doch,
Klar geht das, aber praktisch?
Wofür?
Um Leuten das Leben schwer zu machen?

Wieso wirfst du Exceptions in deinem try Block?

So sollten Exceptions nicht verwendet werden! :meld:
 
Warum eigentlich nicht? Welchen Sinn hat ein try-Block, in dem keine Exceptions geworfen werden?
Die Sache ist folgendermassen: Er sollte Code ausführen, der Exceptions wirft und nicht selber welche werfen 😉

Als Beispiel wären da die checked Exceptions, welche geworfen werden können, wenn man eine DB Connection aufmacht:
Code:
try { 
    Class.forName("com.imaginary.sql.msql.MsqlDriver"); 
    String url = "jdbc:msql://www.myserver.com:1114/contact_mgr"; 
    Connection conn = DriverManager.getConnection(url,"user1","password");  
} catch (Exception e) { 
    throw new MeineEigeneRuntimeException("Konnte keine Verbindung zur DatenBankherstellen!", e);        
}

So wie sich sein Beispiel oben liest, benutzt er wirft er die Exceptions, um den Programmfluss zu steuern.
Schräges beispiel:

Code:
Iterator it= meineListe.iterator();

try{
    while (true) {
        System.out.println(it.next());
    }
} catch (NoSuchElementException e) {}
...
Man würde nie so über einer iterator laufen, oder? 😉
Denn dafür gibt es weitaus bessere Möglichkeiten.

Zurück zum Original Beispiel, mit etwas "Fleisch auf den Knochen":
Code:
try {
    if (i == 0 )
        throw new Exception( "i darf nicht null sein!" );
....
} catch(Exception e) {
    // ...und nun folgt eine Total unsinnige Fehlerbehandlung...
}
Falls i ein Parameter einer Methode war der nicht 0 sein darf, sollte er das dem Aufrufer folgendermassen klar machen:
Code:
if (i==0)
    throw new NullpointerException("i darf nicht null sein!");

Selber Exceptions in einem try block werfen die dann im folgenden catch Block verarbeitet werden ist echt schräg 😉
 
maki hat gesagt.:
Selber Exceptions in einem try block werfen die dann im folgenden catch Block verarbeitet werden ist echt schräg 😉

Wenn man die Exceptions zur Programmsteuerung nutzt, ist das wohl wirklich nicht so gut - schon aus Performancegründen, denn die Verarbeitung einer Exception ist sicher "teurer" als eine normale Fallunterscheidung. Trotzdem würde ich es nicht pauschal ablehnen, in einem try-Block Exceptions zu werfen.

Wenn ich zum Beispiel eine XML-Datei einlese und darin bestimmte Einträge suche, dann können da ja verschiedene Fehler auftreten: IO-Fehler (Datei nicht gefunden oder nicht lesbar), Parse-Fehler (XML-Datei nicht well-formed) oder logische Fehler (gesuchte Einträge nicht gefunden). Für den weiteren Programmfluss ist es egal, welche dieser Fehlermeldungen aufgetreten ist, daher würde ich sie gemeinsam behandeln:

Code:
try {
  
  File f = ...
  Document dom = ... // hier können IO- oder Parse-Fehler auftreten
  
  String tagName = ...
  Element elem = ...
  if ( elem == null) throw new Exception( "Element " + tagName + " in der Datei " + f.getAbsolutePath() + " nicht gefunden");

  ...
} catch ( Exception e) {
  //-- gemeinsame Fehlerbehandlung

 ...
}
 
OK Murray, das überzeugt mich, ich nehme meine Aussage zurück 🙂
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben