InputMismatchException

18j

Mitglied
Hallo, ich bin gerade sehr verwirrt was das Thema Exception angeht.

1. Ungeprüfte Exceptions müssen nicht behandelt, aber können behandelt werden oder?
2. Ich habe gelesen, dass wenn man eine Methode mit throws angibt, dass man keinen Try- Catch block braucht. Stimmt es ? Denn bei meinem untenstehen "simplen" Code brauche ich einen Try Catch block, damit es nicht abstürzt.
3. Muss ich eine InputMismatchException werfen wenn ich schon in der Methodensignatur angegeben habe mittels "throws InputMitmatchException"?


Vielen Dank im Voraus!

Java:
package five;

import java.util.InputMismatchException;
import java.util.Scanner;

public class Ill {
    Scanner sc1 = new Scanner(System.in);

    public void rechne() throws InputMismatchException {
        int a = sc1.nextInt();
        int b = sc1.nextInt();
        System.out.println(a + b);

        // throw new InputMismatchException();


    }


    public static void main(String[] args) {

        Ill l1 = new Ill();

        try {
            l1.rechne();
        } catch (InputMismatchException e) {
            System.out.println("Falscher Datentyp");
        }
    }
}
 
Zuletzt bearbeitet von einem Moderator:

mihe7

Top Contributor
1. Ungeprüfte Exceptions müssen nicht behandelt, aber können behandelt werden oder?
Ja

2. Ich habe gelesen, dass wenn man eine Methode mit throws angibt, dass man keinen Try- Catch block braucht. Stimmt es ? Denn bei meinem untenstehen "simplen" Code brauche ich einen Try Catch block, damit es nicht abstürzt.
Mit throws ExceptionKlasse deklarierst Du, dass die Methode eine Exception vom Typ ExceptionKlasse wirft. Exceptions dieses Typs müssen in dieser Methode nicht behandelt werden, das gilt auch dann, wenn die Methode ihrerseits eine Methode aufruft, die eine solche Exception wirft. Das heißt aber nicht, dass die Exception gar nicht behandelt werden muss. Eine unbehandelte Exception führt zum Abbruch des Programms. Außerdem muss throws nur für checked Exceptions angegeben werden, bei unchecked Exceptions ist das nicht erforderlich.

Muss ich eine InputMismatchException werfen wenn ich schon in der Methodensignatur angegeben habe mittels "throws InputMitmatchException"?

InputMismatchException ist eine unchecked Exception, die von den Scanner-Methoden geworfen wird. Da musst Du (rein syntaktisch) in der Methode rechne() gar nichts machen. Wenn main() die Methode rechne() aufruft und die Scanner-Methoden eine InputMismatchEception werfen, dann wandert diese den Callstack hoch, bis sie behandelt wird (die letzte Instanz ist dann die JVM, die das Programm abbricht).

Bedeutet: nextInt() wirft eine InputMismatchException. Die wird an den Aufrufer von nextInt() "zurückgegeben", d. h. an rechne(). rechne() behandelt die Exception nicht, also wird sie an den Aufrufer von rechne() weitergegeben, d. h. an main(). In main() behandelst Du die Exception. Es wird "Falscher Datentyp" ausgegeben und das Programm wird ganz normal beendet, weil nach dem catch in main() nichts weiter passiert. Fehlt der try-catch-Block in main, geht die Exception weiter an den Aufrufer von main() - das wäre dann die JVM; und die behandelt die Exception in Form eines Programmabbruchs.
 
K

kneitzel

Gast
Bezüglich der guten Antwort von @mrBrown möchte ich nur an einer Stelle etwas verbessern:
Mit throws ExceptionKlasse deklarierst Du, dass die Methode eine Exception vom Typ ExceptionKlasse wirft.
Mit throws ExceptionKlasse deklarierst Du, dass die Methode eine Exception vom Typ ExceptionKlasse wirft werfen kann.

3. Muss ich eine InputMismatchException werfen wenn ich schon in der Methodensignatur angegeben habe mittels "throws InputMitmatchException"?
Du musst nicht, aber du könntest, wenn Du es für sinnvoll erachtest. Eine throws Anweisung besagt nicht, dass immer eine solche Exception geworfen wird sondern nur, dass diese eben auftreten kann. nextInt() kann eine InputMismatchException werfen, aber das passiert nur, wenn von der Eingabe kein int gelesen werden kann.
 

Ähnliche Java Themen

Neue Themen


Oben