# try-catch-throw



## exorzist (27. Jan 2004)

kann mir bitte jemand mit einem ganz simplen beispiel die fehlerbehandlungsroutinenen "try-catch" und "throw" erklären? ich weiss zwar im prinzip was sie machen und wie sie funktionieren, aber so 100%ig sitzt es noch nicht. danke!


----------



## Samurider (27. Jan 2004)

```
private void lala() {
  try {
    test();
  } catch (Exception e) {
    System.out.println("Da ist wohl ein Fehler aufgetreten");
  }
}
          
private void test() throws Exception {
  throw new Exception("Mööp");
}
```


----------



## exorzist (27. Jan 2004)

wer lesen kann ist klar im vorteil
ich wollte eine erklärung, keinen code, wie ich das zu schreiben habe, weiss ich selbst


----------



## el_barto (27. Jan 2004)

http://java.sun.com/docs/books/tutorial/essential/exceptions/index.html


----------



## Stefan1200 (27. Jan 2004)

Also der Profie bin ich nicht, aber ich versuche das mal mit ganz simplen Worten zu erklären:

In der Programmierung von Software kann in der Software immer ein Moment eintreten, in dem was passiert, was nicht direkt vorhersehbar ist. Zum Beispiel das in einem Textfeld, in dem eine Zahl eingegeben werden soll, vom Benutzer (versehentlich) ein Buchstabe eintippt, oder in eine Datei geschrieben werden soll, die Schreibgeschützt ist.
Wenn so ein Fall eintritt, wird das Problem mit dem Abfangen der Fehler, auch als Exception bekannt, kontrolliert gelöst oder zumindest sollte dann eine Fehlermeldung ausgegeben werden.

Ich hoffe das hilft dir etwas.


----------



## Samurider (28. Jan 2004)

exorzist hat gesagt.:
			
		

> wer lesen kann ist klar im vorteil
> ich wollte eine erklärung, keinen code, wie ich das zu schreiben habe, weiss ich selbst



Hm... dachte, das wäre selbst-erklärend 

Also, wie *Stefan1200* schon geschrieben hat, kann es fast immer und fast über zu Fehlern kommen.
Diese Ecxeptions werden irgendwo ausgelöst (sozusagen 'geworfen') und an anderer Stelle sollten sie wieder 'gefangen' werden. Wenn irgendwo ein Exception nicht gefangen wird, kommt es zu einem Abbruch (Unhandled Exception), mit dem der Benutzer (der wahrscheinlich keine Ahnung von Java hat / haben will) recht wenig anfangen kann.
Meine o.a. Methode test() wirft u.U. eine Exception (ok, sie wirft immer eine *g*), deshalb muss das mit "throws Exception" nach aussen bekannt gemacht werden.
Innerhalb von lala(), wo test() aufgerufen wird, ist nun ein try()-catch()-Block, der es ermöglicht, die Exception abzufangen und etwas anderes danach zu tun. (Hinweis an den User/Alternative Abläufe/...)

Gruß,
JT


----------



## exorzist (28. Jan 2004)

vielen dank erstmal für eure hilfe.
langsam kommt licht ins dunkel.

könnte ich evtl. trotzdem noch ein konkretes beispiel haben? nehmen wir mal das obige beispiel mit dem textfeld. es sollen nur buchstaben angenommen werden und bei zahlen tritt dann eine exception auf. wie sähe der code aus?

danke


----------



## Stefan1200 (28. Jan 2004)

exorzist hat gesagt.:
			
		

> nehmen wir mal das obige beispiel mit dem textfeld. es sollen nur buchstaben angenommen werden und bei zahlen tritt dann eine exception auf. wie sähe der code aus?



Eher anders herum. Mal angenommen, du hast ein Textfeld, in das eine Zahl geschrieben werden soll.
Jetzt schreibt aber jemand ein Buchstabe herein, dann tritt beim Umwandeln in eine Zahl eine Exception (Fehler) auf.


```
String tmp = textfeld.getText();
int zahl = Integer.parseInt(tmp);
```

Hier würde dann in der zweiten Zeile eine Exception, genauer NumberFormatException, auftreten.
Das abfangen würde dann so gehen:


```
String tmp = textfeld.getText();
try
{
    int zahl = Integer.parseInt(tmp);
}
catch (NumberFormatException e)
{
    System.out.println("Hey, nur Zahlen eingeben!");
}
```


----------



## exorzist (28. Jan 2004)

danke, jetzt hab ichs kapiert, nur nehmen wir mal an, ich möchte es doch umgekehrt machen, also nur buchstaben, keine zahlen. wie sähe nun das aus?
danke!


----------



## el_barto (28. Jan 2004)

tja, da sich in einem textfeld nun mal ein string befindet und in einem string alles mögliche vorkommt, würde dir nichts anderes übrig bleiben, als den string auseinander zu nehmen und zu analysieren.


----------



## exorzist (29. Jan 2004)

ok, verstanden, aber in dem fall würde ein try() catch() block keinen sinn machen, oder? weil ich ja selbst bereits überprüfe und entsprechend den fall behandle, richtig?


----------



## el_barto (29. Jan 2004)

erfasst


----------



## Hai (30. Jan 2004)

und wie ist das nun mit "throws exception" in diesem vorigen Beispiel?

Bzw. möchte ich den Unterschied wissen zwischen try-catch und throws...


----------



## Stefan1200 (30. Jan 2004)

Hai hat gesagt.:
			
		

> Bzw. möchte ich den Unterschied wissen zwischen try-catch und throws...



Das ist relativ einfach erklärt.
Nehmen wir mal an, du schreibst dir eine Methode, die wie oben Beschrieben den String in einen
Integer umwandelt. Nun kann ja wie oben beschrieben ein NumberFormatException auftreten.
Nun möchtest du aber den Fehler nicht in dieser Methode behandeln, also auf den Fehler reagieren, sondern in der Methode, wo du deine Umwandlungsmethode aufrufst, lässt du try catch weg, und schreibst direkt vor der Klammer { der Methode einfach *throws NumberFormatException*. In diesem Fall bekommt der Aufrufer der Methode den Fehler zurück, und brauchst dich erst dort mit try catch darum kümmern, das dein Programm darauf entsprechend reagiert.


----------



## el_barto (30. Jan 2004)

el_barto hat gesagt.:
			
		

> http://java.sun.com/docs/books/tutorial/essential/exceptions/index.html


kann nur nochmal auf meinen beitrag von oben verweisen. da ist alles beschrieben. un für die des englischen nicht mächtigen:
http://www.rz.fhtw-berlin.de/hjp3/cover.html
http://www.galileocomputing.de/openbook/javainsel3/


----------

