Ausnahmen in Java

coldstone

Bekanntes Mitglied
Hallo liebe freunde,

habe folgende frage:

Java:
import de.vfh.gp1.bib.Konsole;


public class GanzzahlDivisionMit {
    public static void main(String[] args) {

        int ganz1, ganz2;
        System.out.println("Ausnahmebehandlung am Beispiel der Division\n");
        try {
            System.out.print("1. ganze Zahl: ");
            ganz1 = Konsole.getInputInt();
            System.out.print("\n2. ganze Zahl: ");
            ganz2 = Konsole.getInputInt();
            System.out.println("\nErgebnis der Division: " + ganz1 / ganz2);
        } catch (NumberFormatException e) {
            System.out.println("Das war keine korrekte ganze Zahl");
        } catch (ArithmeticException e) {
            System.out.println("Die 2. Zahl ist 0.");
            System.out.println("Division durch 0 ist nicht ausfuehrbar!");
        } finally {
            System.out
                    .println("Anweisungen im finally-Block werden immer ausgefuehrt.");
        }
    } // main
} // class GanzzahlDivisionM

Verstehe ich das Richtig das der try Block (Zeile 10 - 15) die Stelle markiert in der ein fehler auftreten kann?
Mit dem catch Block definiere ich welche art von fehler es ist?
Wie bekomme ich den die Art des Fehlers raus? Ich meine woher weiss ich ob es eine NumberFormatException oder eine ArithmeticException oder was auch immer ist?
Und was bedeutet das "e" in Zeile 16 und 18?

Für hilfe währe ich sehr dankbar.

mfg
 
Das verstehst du soweit richtig. Um zu wissen, welcher Fehler es war, könntest du
Java:
System.out.println(e);
schreiben. e "bezeichnet" nämlich die Art des Fehlers.
 
Das sieht du in der API der
Code:
getInputInt
Methode. Dort steht beschrieben welche Ausnahmen eine Methode werfen kann.

z.B. Hier
Scanner#nextInt()

Dort stehen unter Throws die Ausnahmen aufgelistet.

Code:
InputMismatchException
- if the next token does not match the Integer regular expression, or is out of range
Code:
NoSuchElementException
- if input is exhausted
Code:
IllegalStateException
- if this scanner is closed
 
Mit dem Try sagst du, Ich versuche mal diesen Code, mal sehen, ob er fehlerfrei läuft.
Mit dem Catch sagst du, wenn aber ein bestimmter Fehler auftritt, fange ich ihn ab, war ja nur ein Versuch.

Und dieser Fehler ist in Java ein Objekt, nämlich dieses
Code:
e
. Je nachdem in welchen catch-Blog gesprungen wird, handelt es sich um diesen Fehler. Der Catch-Block definiert nur welchen Fehler du abfangen möchtest, wenn er auftritt. Dank Vererbung kannst du auch alle möglichen Fehler mit
Code:
catch(Throwable t){..}
abfangen, da jede Exception auch ein Objekt vom Typ Throwable ist. Aber dieses Vorgehen ist nicht zu empfehlen.
 
Vielen dank für die antworten.
Also ist das "e" ,das nach der bezeichnung des fehlers kommt, ein hinweis ,dass es sich um ein objekt handelt was den fehler verursacht und muss immer angegeben werden! Richtig?
 
Zuletzt bearbeitet:
e verursacht nicht den Fehler, sondern ist sozusagen der Fehler. Es ist eine Instanz des Fehlertyps.
Das muss aber als Parameter im catch statement angegeben werden. Du kannst das ganze aber nennen, wie du möchtest. Beispielsweise ist auch
Code:
catch (ArithmeticException hallo){...}
möglich. Dann bezeichnet "hallo" eben den Typ von Fehler.
 
Vielen dank für die antworten.
Also ist das "e" ,das nach der bezeichnung des fehlers kommt, ein hinweis ,dass es sich um ein objekt handelt was den fehler verursacht und muss immer angegeben werden! Richtig?
wurde ja schon gesagt, [c]e[/c] ist einfach ein Name fuer das Objekt, man kann auch einen anderen namen.

du bekommst mit der Ausnahme einen Hinweis darauf was schief gegangen ist, nicht direkt das Objekt was fehlerhaft war. Es ist mehr ein Hinweis darauf, was schiefgegangen ist und wo.

Du musst es nicht immer ausgeben. Fuer testzwecke bzw in manchen Faellen tut man das, du kannst aber es auch ignorieren (nur bei begruendeten faellen) oder an die aufrufende methode weitergeben, zb

Java:
public void eineMethodeDieEinenFehlerWirft() throws IOException {
   // hier passiert irgendwas was eine IOException ausloest
 
ok


nur um es nochmal zu verdeutlichen:

Java:
        try {
            System.out.print("1. ganze Zahl: ");
            ganz1 = Konsole.getInputInt();
            System.out.print("\n2. ganze Zahl: ");
            ganz2 = Konsole.getInputInt();
            System.out.println("\nErgebnis der Division: " + ganz1 / ganz2);
        } .........

dieser teil sagt: " Gucke ob in diesen Zeilen ein Fehler entsteht?!" Richtig?


Java:
 catch (NumberFormatException e) {
            System.out.println("Das war keine korrekte ganze Zahl");
        } catch (ArithmeticException e) {
            System.out.println("Die 2. Zahl ist 0.");
            System.out.println("Division durch 0 ist nicht ausfuehrbar!");
        }

catch = "Fange den Fehler auf!"

NumberFormatException = Die Art und weise des Fehlers.

e = Der Fehler, der als Objekt e definiert wird.

Soweit Richtig?

Wieviele catch Blöcke können nach einem try Block eigentlich geschrieben werden? Ist da eine Grenze gesetzt?
Es könnten ja nämlich sehr viele Fehlerarten verursacht werden die man vielleicht abfangen möchte.

Was bewirkt dieses finally? Wozu braucht man es?

Verstehe ich dass richtig, dass exceptions dazu dienen, dem Nutzer bei einer Fehleingabe, die Fehlerursache Verständlich auszugeben?


Sorry wenn ich zuviel frage, aber so wird es einem viel eindeutiger.

Vielen dank für eure Antworten
 
Wieviele catch Blöcke können nach einem try Block eigentlich geschrieben werden? Ist da eine Grenze gesetzt?
denke nicht, man hat aber im Allgemeine nicht so viele.

Was bewirkt dieses finally? Wozu braucht man es?
nach dem Prinzip "egal was auch immer passiert, welche exception fliegt oder nicht, arbeite am Ende IMMER den finally Block ab"
Verstehe ich dass richtig, dass exceptions dazu dienen, dem Nutzer bei einer Fehleingabe, die Fehlerursache Verständlich auszugeben?
eher nicht dem Nutzer, sondern dem Programmierer. Ihm wird dadurch mitgeteilt "achtung hier kann etwas passieren, kuemmere dich drum"
 
Richtig. Es ist für die Fälle gedacht, in denen bestimmter Code ausgeführt werden soll, unabhängig davon ob eine Exception aufgetreten ist oder nicht.
 

Neue Themen


Zurück
Oben