Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hallo, ich habe eine Methode mit einem String als return-Wert, der am Anfang der Methode mit "ERROR" initialisiert wird. Die Methode hat einen catch-Block. Nun wenn eine Exception auftritt, wie sieht der return-Wert aus? Muss ich einen finally-Block machen in dem return String steht, damit ich einen gültigen return-Wert habe? Im Fehlerfall soll immer ERROR zurückgegeben werden.
Beispiel:
try {
String s = null;
s.indexOf("blupp"); // wirft NullPointerException
}
catch (IllegalArgumentException e) {
System.err.println("Fehler !");
}
finally {
System.out.println("finally"); // wird ausgegeben
}
System.out.println("Hinter try-catch-finally"); // wird nicht mehr ausgegeben
Anmerkung: Würde man anstatt der IllegalArgumentException die (richtige) Exception (=NullPointerException) catchen, so würde die letzte Anweisung System.out.println("Hinter try-catch-finally"); ausgeführt werden.
Ganz allgemeine Erklärung dazu: Die finally-Klausel wird immer dann ausgeführt (natürlich am Ende), wenn die zugehörige try-Klausel betreten wurde.
Hallo, ich habe eine Methode mit einem String als return-Wert, der am Anfang der Methode mit "ERROR" initialisiert wird. Die Methode hat einen catch-Block. Nun wenn eine Exception auftritt, wie sieht der return-Wert aus? Muss ich einen finally-Block machen in dem return String steht, damit ich einen gültigen return-Wert habe? Im Fehlerfall soll immer ERROR zurückgegeben werden.
Beispiel:
String strRcv = "ERROR";
try {
// Arbeiten
} catch (Exception e) { // Hier wenn möglich vielleicht die Exception die fallen kann abfagen (wenn es sich eingrenzen lässt)
// wenn Fehler aufgetreten zur Sicherheit String nochmal mit Error füllen (is nur notwendig, wenn der String vorher evtl. verändert wurde)
strRcv = "ERROR";
}
return strRcv;
Keine Ahnung was du im TRY machen willst, aber ein finally ist hier sicher nicht unbedingt notwendig.
d.h. also, wenn die entsprechende Exception gefangen wird, wird die return Anweisung immer ausgeführt. In welchem Fall braucht man einen finally-Block?
Gruss Urs
Sie wird nur darum ausgeführt, weil sie direkt nach deinem try-catch-Block kommt.
finally brauchst du, wenn du Anweisungen hast, die in jedem Fall noch ausgeführt werden sollen
Klassisches Beispiel: Du willst eine Datei kopieren und öffnest beide Dateien im try-Block.
Auch die Kopieraktion selbst findet in diesem Block statt um IO-Exceptions aufzufangen.
Dann wird der finally Block benutzt um eventuell geöffnete Dateien sauber zu schließen.