Fragen zu Exception (Throws/throw)

Zerato

Mitglied
Hallo,

ich habe die ganze Zeit versucht mich darüber informieren, bin aber nur etwas schlauer geworden.
Ich weiß, dass throws in der Methodensignatur steht, um eine Exception weiterzuwerfen und throw selbst eine Exception zu werfen. Mit Try-Catch kann man dann die Ausnahme behandeln oder?
Ich verstehe immer noch nicht, wann ich was benutzen soll.

Code:
class Example1{ 
   void method1() throws ArithmeticException{ 
    throw new ArithmeticException("Calculation error");
   } 
   void method2() throws ArithmeticException{ 
    method1(); 
   } 
   void method3(){ 
    try{ 
       method2(); 
    }
    catch(ArithmeticException e){
       System.out.println("ArithmeticException handled");
    } 
   } 
   public static void main(String args[]){ 
    Example1 obj=new Example1(); 
    obj.method3(); 
    System.out.println("End Of Program"); 
   } 
}

Gibt folgendes aus:

Code:
ArithmeticException handled
End Of Program

Folgende Fragen schwirren in meinem Kopf:

1. Soweit ich verstanden habe, ruft die main Methode method3() auf, dieser ruft method2() auf und dieser wiederum method()1, die eine Exception wirft und dieser leitet es weiter an method3() welche die Exception behandelt? Ist das richtig?

2. Aber warum erscheint in der Konsole auch nicht "Calculation error" sondern nur "ArithmeticException handled"?

3. Kann man bei method3() die "throws ArithmeticException" im Methodenkopf entfernen? Macht das sinn?
 

LimDul

Top Contributor
1. Soweit ich verstanden habe, ruft die main Methode method3() auf, dieser ruft method2() auf und dieser wiederum method()1, die eine Exception wirft und dieser leitet es weiter an method3() welche die Exception behandelt? Ist das richtig?
Korrekt

2. Aber warum erscheint in der Konsole auch nicht "Calculation error" sondern nur "ArithmeticException handled"?
Gegenfrage: Warum sollte es? Du gibst den Text ja nirgendwo aus. Wenn dein Code so aussehen würde an der Stelle
Java:
    catch(ArithmeticException e){
       System.out.println("ArithmeticException handled: "+e.getMessage());
    }
Dann würde der Text "ArithmeticException handled: Calculation error" erscheinen. Dadurch das du die Exceptions fängst, wird von denen Eigenschaften der Exception nichts ausgegeben - die zu nutzen, dafür bist du dann im catch-Teil verantwortlich. Nur wenn die Exception gar nicht gefangen wird, sorgt die Java-VM dafür, dass das Programm beendet wird und die Nachricht (Hier: Calculation error) und der gesamte Stacktrace auf der Konsole ausgegeben wird.

3. Kann man bei method3() die "throws ArithmeticException" im Methodenkopf entfernen? Macht das sinn?
Ist bei dir doch gar nicht mehr drin. Also ja, das geht und ist auch sinnvoll.

Bezüglich der Exceptions gibt es (grob) zwei Klassen:
* Die RuntimeExceptions. Diese muss man nicht im Methodenkopf deklarieren und die muss man auch nicht fangen. Klassiker hier sind z.B. die NullPointerException.
* Die Checked Exceptions. Wenn man diese wirft, muss man das im Methodenkopf deklarieren und der Aufrufer muss die entweder per catch fangen (Bei dir in Methode 3) oder ebenfalls im Methodenkopf deklarieren, damit sie weitergeworfen werden (Bei dir in Methode 2)
 

Zerato

Mitglied
Ahhhh danke sehr!

Sorry, ich meinte zu 3.
-> Kann man bei method1() das throws weglassen und nur in der Methode throw new ArithmeticException schreiben? Ich verstehe den Sinn nicht, dass man throws und throw hat, reicht nicht eins von beiden?
 

Zerato

Mitglied
Und eine weiteres Problem, was ich schon mehrfach habe, aber keine Lösung gefunden habe...

Ich habe versucht einen kleinen Taschenrechner zu programmieren mit einer Schleife und dort ein try-catch Block reingetan, um InputMismatchException zu behandeln.

Dieser sieht so aus

Code:
import java.util.InputMismatchException;
import java.util.Scanner;

public class Taschenrechner {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        boolean schleife = true;
        int loop = 1;
        while (loop == 1) {

            try {

                System.out.println("Bitte erste Zahl eingeben:");
                int zahl1 = scanner.nextInt();
                System.out.println("Bitte zweite Zahl eingeben");
                int zahl2 = scanner.nextInt();

                System.out.println("Bitte Operand eingeben (1 für +)(2 für -)(3 für *)(4 für /): ");

                int eingabe = scanner.nextInt();

                switch (eingabe) {
                case 1:
                    System.out.println("Ergebnis: " + zahl1 + " + " + zahl2 + " = " + (zahl1 + zahl2));
                    break;
                case 2:
                    System.out.println("Ergebnis: " + zahl1 + " - " + zahl2 + " = " + (zahl1 - zahl2));
                    break;
                case 3:
                    System.out.println("Ergebnis: " + zahl1 + " * " + zahl2 + " = " + (zahl1 * zahl2));
                    break;
                case 4:
                    System.out.println("Ergebnis: " + zahl1 + " / " + zahl2 + " = " + (zahl1 / zahl2));
                    break;
                default:
                    System.out.println("Ungültige Eingabe!");

                }

                System.out.println("Möchten Sie wiederholen? (1 = ja)(Beliebige Zahl = nein)");

                loop = scanner.nextInt();

            } catch (InputMismatchException e) {
                System.out.println("Ungültige Eingabe, bitte nochmal versuchen!");
                scanner.nextInt();
            }

        }
        scanner.close();
        System.out.println("Ciao!");

    }

}

Bei einer String Eingabe, wird die Ausnahme abgefangen, aber es kommt noch eine weitere Exception, warum? Habe den doch behandelt...
Ich möchte, dass er wieder von vorne anfängt nach der Catch Anweisung...

Code:
Bitte erste Zahl eingeben:
er
Ungültige Eingabe, bitte nochmal versuchen!
Exception in thread "main" java.util.InputMismatchException
    at java.util.Scanner.throwFor(Unknown Source)
    at java.util.Scanner.next(Unknown Source)
    at java.util.Scanner.nextInt(Unknown Source)
    at java.util.Scanner.nextInt(Unknown Source)
    at Taschenrechner.main(Taschenrechner.java:48)

Was mache ich falsch? :(
 

mihe7

Top Contributor
Entwickler an Scanner: gib mir ein int.
Scanner an Eingabestrom: gib mir Input
... an der Stelle dauert es nun, bis der Benutzer den Eingabestrom mit dem "er" und dem Zeilenende füllt...
... aber dann:
Scanner an Entwickler: örks, hab hier kein int (Exception #1)
Entwickler an Scanner: GIB MIR EIN INT
Scanner an Entwickler: Du kannst mich noch zehnmal fragen, aus dem "er" wird kein int (Exception #2)
 

Zerato

Mitglied
Ahhhh, weil ganze Zeit dieser String im Scanner gespeichert ist, ließt er immer wieder dieses "er"?
Was könnte ich machen? Habe scanner.nextInt(); entfernt und es kommt eine Endlosschleife... Ich komme einfach nicht auf die Lösung:(
 

Zerato

Mitglied
Okay, ich habe einfach scanner.nextLine(); daraus gemacht und es scheint zu funktionieren! Danke nochmals:D

Eine Frage hätte ich noch bezüglich throws

Code:
public static double divide(double a, double b) {
        if (b == 0) {
            throw new ArithmeticException("Divider cannot be equal to zero!");
        }
        return a / b;
    }

Code:
public void drive() throws Exception {
        if (horsePower == 0) {
            throw new Exception();
        }
        System.out.print("Error");
    }

Warum braucht man im 1. Code dieses throws nicht im Methodenkopf?
Gibt es einen Unterschied wenn ich im 1. Code trotzdem "throws ArithmethicException" hinschreibe?
 

mihe7

Top Contributor
Es gibt sog. checked und unchecked Exceptions. Die checked Exceptions sind solche, bei denen der Entwickler vom Compiler gezwungen wird, sie zu behandeln. Wird eine solche Exception ausgelöst, muss sie in der Methodensignatur deklariert werden. Zur Behandlung gibt es zwei Möglichkeiten:

1. try-catch, d. h. abfangen
2. throws deklarieren, also einfach weitergeben

Unchecked Exceptions müssen dagegen nicht zwangsweise vom Entwickler behandelt und daher auch nicht deklariert werden.

Du kannst auch unchecked Exceptions in der Signatur deklarieren, das spielt keine Rolle.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
GreenTeaYT Exception und zur OOP fragen? Java Basics - Anfänger-Themen 3
S 2 Einfache Fragen (Exception Breakpoint, Konstruktor) Java Basics - Anfänger-Themen 4
A Exception Handling Fragen Java Basics - Anfänger-Themen 2
Zrebna Fragen zu einem Klassendiagramm Java Basics - Anfänger-Themen 8
H Fragen zu Wrapperklassen Java Basics - Anfänger-Themen 29
S Best Practice Fragen zu Projektstruktur einer Datenbank-Abfrage-App (MVC) Java Basics - Anfänger-Themen 13
A Bei VierGewinnt fragen ob man gegen CPU oder Menschen spielen will. Java Basics - Anfänger-Themen 7
A Bei VierGewinnt vorher fragen, ob man gegen den Computer spielen möchte oder gegeneinander. Java Basics - Anfänger-Themen 1
A Bei VierGewinnt fragen, ob man gegen den Computer spielen möchte oder gegeneinander Java Basics - Anfänger-Themen 1
sserio Wie kann man nach einer Klasse fragen? Java Basics - Anfänger-Themen 12
G Fragen zu Kompelierfehler in Aufgabe. Java Basics - Anfänger-Themen 25
E Bäume/ allgemeine Fragen Java Basics - Anfänger-Themen 21
O Falsche Antworten zu Fragen Java Basics - Anfänger-Themen 4
S Diverse Fragen vor Schulaufgabe ;) Java Basics - Anfänger-Themen 4
S Fragen zu Ausgabe double und float Java Basics - Anfänger-Themen 3
B fragen zu Aufbau eines UML-Klassendiagramm Java Basics - Anfänger-Themen 1
C 3 Fragen rund um Klassenattribute Java Basics - Anfänger-Themen 8
L Erste Schritte Log4J Fragen Java Basics - Anfänger-Themen 5
NeoLexx Fragen zu diversen Elementen der Javabibliothek Java Basics - Anfänger-Themen 5
D Budget Manager fragen zur Umsetzung Java Basics - Anfänger-Themen 9
N Fragen zur Datenspeicherung Java Basics - Anfänger-Themen 45
T Java Anfänger mit konkreten Fragen Java Basics - Anfänger-Themen 2
CT9288 Fragen zu Java Java Basics - Anfänger-Themen 16
W Fragen zu Generics Java Basics - Anfänger-Themen 14
T ObjectInput/OutputStream Fragen zur Funktionsweise Java Basics - Anfänger-Themen 3
J Fragen zu einer Methode Java Basics - Anfänger-Themen 3
J Fragen zum Code aus dem Buch "Schrödinger programmiert Java 2.te Ausgabe" Java Basics - Anfänger-Themen 6
J Fragen zu Input/Output Java Basics - Anfänger-Themen 3
J Erste Schritte Oracle Tutorials zu Java 8 - Fragen dazu Java Basics - Anfänger-Themen 1
H Java Quereinsteiger Roadmap und Fragen Java Basics - Anfänger-Themen 29
H fragen Java Basics - Anfänger-Themen 15
M Samelsarium Grundlegender Fragen 2 Java Basics - Anfänger-Themen 9
M Sammelsarium an Grundlagen Grundlagen Fragen Java Basics - Anfänger-Themen 11
B Java ist / wird kostenpflichtig. Ein paar Fragen Java Basics - Anfänger-Themen 1
J Fragen zu synrchonized und kritischen Abschnitten Java Basics - Anfänger-Themen 5
S Fragen zu einem Rechentrainer Java Basics - Anfänger-Themen 2
B Java Vererbung Fragen (zu Code Beispiel) Java Basics - Anfänger-Themen 3
J Wo kann man Fragen zu ireport stellen. Java Basics - Anfänger-Themen 0
M Fragen zum Anlegen und Benutzen von Listen Java Basics - Anfänger-Themen 9
G Ein paar Anfänger Fragen zu StdDraw Java Basics - Anfänger-Themen 4
D Fragen zur Klassen Java Basics - Anfänger-Themen 4
Aprendiendo Zwei Fragen und ein geerbtes "protected"-Attribut Java Basics - Anfänger-Themen 2
J Interface Fragen bezüglich "Sauberkeit" von Code Java Basics - Anfänger-Themen 5
D Objekte-Fragen Java Basics - Anfänger-Themen 1
V Erste Schritte Habe Fragen zu der For und While Schleife als auch Inkrement und Dekrement Java Basics - Anfänger-Themen 4
D Anfänger-Fragen(Parameter einer Methode) Java Basics - Anfänger-Themen 7
K Zwei Fragen zu Graphics/Graphics2D Java Basics - Anfänger-Themen 5
R Fragen über den Konstruktor Java Basics - Anfänger-Themen 0
Azazel Ein paar Fragen zu Methodenaufrufen(java.awt) Java Basics - Anfänger-Themen 2
S Erste Schritte Fragen zur For-Schleife Java Basics - Anfänger-Themen 9
C Interface Fragen zum Interface Java Basics - Anfänger-Themen 7
C Fragen zum Spigot Plugin (1.8) Java Basics - Anfänger-Themen 6
J Fragen zu Exceptions Java Basics - Anfänger-Themen 24
N Quiz- Fragen zufällig anzeigen lassen Java Basics - Anfänger-Themen 7
J Verschieden Fragen über Java Programmierung Java Basics - Anfänger-Themen 3
L Viele Fragen zu den Grundlagen Java Basics - Anfänger-Themen 5
B Fragen zu ZIP-File Java Basics - Anfänger-Themen 9
L fragen zu arrays Java Basics - Anfänger-Themen 8
L Fragen zu selbstgeschriebenem Programm Java Basics - Anfänger-Themen 5
M Fragen zum Auslesen von HTML Seiten Java Basics - Anfänger-Themen 5
J Threading-Aufgabe. Totale Noob Fragen, aber bitte trotzdem beantworten ;) Java Basics - Anfänger-Themen 7
S Java Fragen Konstruktor & Statische Methoden Java Basics - Anfänger-Themen 4
K Erste Schritte Frage Antwort Spiel - Fragen zur Planung Java Basics - Anfänger-Themen 2
C Java Applet Fragen: Serialisierung, Excel import Java Basics - Anfänger-Themen 2
Anfänger2011 2 kleine Fragen zu ArrayListen Java Basics - Anfänger-Themen 5
S Fragen zu Ausdrücken&Bedingungen Java Basics - Anfänger-Themen 5
A 2 kurze Anfänger fragen Java Basics - Anfänger-Themen 6
H grundlegende Fragen Java Basics - Anfänger-Themen 3
V Interface ich schäme mich das zu fragen, aber ich schaff nicht ein Text zu zentrieren :( [javaFX] Java Basics - Anfänger-Themen 6
N Programm: Fragen beantworten Java Basics - Anfänger-Themen 6
C Anfänger Anfänger Fragen Java Basics - Anfänger-Themen 8
Z Compiler-Fehler LinkedList Fragen Java Basics - Anfänger-Themen 4
D Rekursion Allgemeine Fragen Java Basics - Anfänger-Themen 2
D [Fragen] zu Methoden Java Basics - Anfänger-Themen 2
S Fragen zur Implementierung eines Binärbaums Java Basics - Anfänger-Themen 3
T Ein paar Fragen zu OOP und Java. Java Basics - Anfänger-Themen 16
J Allgemeine Fragen zur GUI Java Basics - Anfänger-Themen 1
johnnydoe Erste Schritte Erster Blick - erste Fragen Java Basics - Anfänger-Themen 11
DStrohma Grundsätzliche Fragen zu Drag & Drop Java Basics - Anfänger-Themen 1
N Klassen fragen zur getter und setter methode Java Basics - Anfänger-Themen 11
S 3 Fragen, Verzeichnis, GridLayout psoitionieren, Werte für JSpinner Java Basics - Anfänger-Themen 2
T Fragen zu Set / Relationen verknüpfen Java Basics - Anfänger-Themen 4
S 2 Fragen Java Basics - Anfänger-Themen 4
S Hallo und Fragen zu Arbeitsverzeichnis und Menü Java Basics - Anfänger-Themen 8
N Java Fragen... Java Basics - Anfänger-Themen 10
F ExecutorService Fragen! Java Basics - Anfänger-Themen 2
O HashMap Fragen Java Basics - Anfänger-Themen 8
C Fragen zu Arrays Java Basics - Anfänger-Themen 19
T viele "kleine" Fragen... Java Basics - Anfänger-Themen 3
S Fragen zur Implementierung eines Adressbuches Java Basics - Anfänger-Themen 20
S Fragen zu Arrays Java Basics - Anfänger-Themen 6
K Diverse Fragen zum Fehlerlogging Java Basics - Anfänger-Themen 9
N StringReader - Fragen Java Basics - Anfänger-Themen 8
C Einige Fragen zu Frames Java Basics - Anfänger-Themen 7
M Erste Schritte Allgemeine Fragen Java Basics - Anfänger-Themen 4
PaulG Fragen zu Binärbaum Java Basics - Anfänger-Themen 21
P Methoden Aquarium (Fragen zum Scanner) Java Basics - Anfänger-Themen 5
T Erste Schritte Fragen zu meinen kleinen Programm Java Basics - Anfänger-Themen 9
D 2 Fragen: Position ändern vs. LayoutManager / Bilder einfügen im Vordergrund Java Basics - Anfänger-Themen 3
O Zwei Fragen zu Methoden Aufrufen Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben