try->catch->weitermachen

jeipack

Erfahrenes Mitglied
Hi
gibt es eine Möglichkeit nachdem man im catch-Block einen Fehler abgefangen hat an der nächsten Stelle weiter zu machen an der man aufgehört hat?

Pseudocode:
Java:
try {
System.out.println(a.get(1).getName()); //1
System.out.println(a.get(2).getName()); //2 ich werfe eine NullPointerException
System.out.println(a.get(3).getName()); //3
System.out.println(a.get(4).getName()); //4
System.out.println(a.get(5).getName()); //5

} catch(NullPointerException ex) {
System.out.println("Da war ein Fehler...");
//weitermachen bei 3
}

Klar könnte ich auch jede einzelne Anweisung in einen try-catch-Block verpacken aber 1. Mühsam und 2. wird der Code dadurch nicht übersichtlicher..
In diesem speziellen Fall könnte ich auch alles erst auf null überprüfen und dann getName() aufrufen -> Auch Mühsam und darauf will ich sowieso nicht hinaus..

Grüsse und danke
Hoffe es geht ihrgendwie ;)
 
So etwas ist mir jetzt nicht bekannt, aber vieleicht kannst du ja mit finaly etwas anfangen.
try -> catch -> final
Der final-Block wird nämlich auf jedenfall bei einer Exception noch ausgeführt.
 
Fang einfach nicht mit try->catch ab
kannst als alternative auch auf
Code:
if( obj == Null)

und dann halt überspringen

vllt noch in eine Schleife rein wenn dies Möglich ist

mfg
 
Zuletzt bearbeitet:
Hallo,

wenn du es so machst wird es nicht funktionieren. Du müsstest in jeder Zeile ein try/catch drum bauen. Da wäre aber eine If-Anweisung wesentlich sinnvoller.


MFG

Sascha
 
@Leroux
Eben jenes will er vermeiden (siehe seinen Post) :rolleyes:
Auch wenn ich mir nicht vorstellen kann, wie das gehen soll.


Edit: Ups zu langsam... 60 Sekunden Warten nach letztem Post:rolleyes:
 
Java:
for(int i = 1; i <= 4; i++) {
  try {
    System.out.println(a.get(i).getName());
  } catch(Throwable t) {
    t.printStackTrace();
  }
}

Kommt darauf an, wo du das wirklich verwenden willst... wirklich beim iterieren durch eine Liste?!
 
IMO sollten Exceptions nur geworfen werden, wenn auch wirkich ein Fehler vorliegt.

RuntimeExceptions (also Nullpointer, NumberFormat;ArrayIndexOutofbounds.....) jedoch sollten nie fliegen, da man diese durch Überprüfung verhindern kann.

Also entweder sorgst du dafür, dass kein Null in der Liste steht oder du überprüfst es vorher mittels if. (am einfachsten in einer Schleife)

Java:
      for(int i = 0; i < a.size(); i++) {
   Object tmp = a.get(i);
if(tmp!=null)
{
System.out.println(a.get(i).getName());
}
else{
//log Ausgabe oder counter wieviel null sind oder oder
}
          
      }

P.S.: der Index einer Liste beginnt bei 0
 
RuntimeExceptions (also Nullpointer, NumberFormat;ArrayIndexOutofbounds.....) jedoch sollten nie fliegen, da man diese durch Überprüfung verhindern kann.
Exceptions sollten grundsätzlich nie fliegen, deshalb sind sie Ausnahmen ;). Irgendwie macht der Satz aber auch insgesamt keinen Sinn. Eigentlich ist das Gegenteil der Fall. RuntimeExceptions sind eigentlich End of the world Szenarien (DBConnection weg usw.), d.h. man will nicht überall explizit drauf reagieren, sondern diese zentral irgendwo fangen.

Im übrigen ist Java die einzige populäre Sprache in der es überhaupt checked Exceptions gibt.

Zum Code des Originalposters: ich halte diese Art, eine Liste zu durchsuchen für Unfug. Eine foreach Schleife um die Liste herum, eine null-Prüfung und du bist glücklich. NPEs gehören nicht gecatcht. NPEs sind Programmierfehler, also End of the World Szenarien.

Gruß
Ollie
 
Hi Leute
Hab wieder Zeit, war recht beschäftigt. MySQL Server bockte rum --> http://www.tutorials.de/forum/linux-unix/322147-debian-mysqld-sock.html

Also erstmal vielen Dank für all die Antworten.

"Kommt darauf an, wo du das wirklich verwenden willst... wirklich beim iterieren durch eine Liste?!"
--> Nein ;) Es war nur Democode. Ich weiss dass man mit ner forschleife durch eine Liste geht.. und auch dass man es erst auf Null prüfen kann oder um jeden einzelnen einen try-catch-Block machen könnte. Da das ganze aber für einen Prototyp ist (und ein _bisschen_ mehr als nur 5 Anweissungen überprüft werden müssten) wollte ich mir den Aufwand einfach ersparen..


Na gut
Danke trozdem
jeipack


PS: In VBA gibts sowas :p


Edit: Ahja final bringt nicht viel, da ich ja wissen müsste wo der Fehler auftrat und dann zur nächsten Anweisung zurückspringen müsste.
 
Zuletzt bearbeitet:
Zurück