it-swarm.com.de

Eine Ausnahme wird im Rumpf der entsprechenden try-Anweisung ausgelöst

Ich habe ein Problem mit der Ausnahmebehandlung in Java, hier ist mein Code. Ich habe einen Compiler-Fehler erhalten, als ich versuche, diese Zeile auszuführen: throw new MojException("Bledne dane");. Der Fehler ist:

ausnahme MojException wird niemals im Rumpf der entsprechenden try-Anweisung ausgelöst

Hier ist der Code:

public class Test {
  public static void main(String[] args) throws MojException {
    // TODO Auto-generated method stub

    for(int i=1;i<args.length;i++){
      try{
        Integer.parseInt(args[i-1]);
      }
      catch(MojException e){
        throw new MojException("Bledne dane");
      }
      try{
        WierszTrojkataPascala a = new WierszTrojkataPascala(Integer.parseInt(args[0]));
        System.out.println(args[i]+" : "+a.wspolczynnik(Integer.parseInt(args[i])));
      }
      catch(MojException e){
        throw new MojException(args[i]+" "+e.getMessage());
      }
    }
  }
}

Und hier ist ein Code von MojException:

public class MojException extends Exception{
    MojException(String s){
        super(s);
    }
}

Kann mir jemand dabei helfen?

11
user3407967

Ein catch-Block in einer try-Anweisung muss genau die Ausnahme abfangen, die der Code im try {}-block can throw (oder eine übergeordnete Klasse davon) enthält.

try {
    //do something that throws ExceptionA, e.g.
    throw new ExceptionA("I am Exception Alpha!");
}
catch(ExceptionA e) {
    //do something to handle the exception, e.g.
    System.out.println("Message: " + e.getMessage());
}

Was Sie versuchen, ist folgendes:

try {
    throw new ExceptionB("I am Exception Bravo!");
}
catch(ExceptionA e) {
    System.out.println("Message: " + e.getMessage());
}

Dies führt zu einem Compiler-Fehler, da Ihr Java weiß, dass Sie versuchen, eine Ausnahme abzufangen, die NIEMALS auftritt. So erhalten Sie: exception ExceptionA is never thrown in body of corresponding try statement.

15
Christian

Wie in den Kommentaren darauf hingewiesen, können Sie keine Ausnahme feststellen, die nicht durch den Code in Ihrem try-Block ausgelöst wird. Ändern Sie Ihren Code in:

try{
    Integer.parseInt(args[i-1]); // this only throws a NumberFormatException
}
catch(NumberFormatException e){
    throw new MojException("Bledne dane");
}

Überprüfen Sie immer die Dokumentation , um zu sehen, welche Ausnahmen von jeder Methode ausgelöst werden. Vielleicht möchten Sie auch etwas über das Thema geprüfte vs. ungeprüfte Ausnahmen nachlesen, bevor Sie in der Zukunft verwirrt werden.

6
Duncan Jones

Denken Sie immer daran, dass Sie im Fall einer geprüften Ausnahmebedingung nur nach dem Auslösen der Ausnahmebedingung abfangen können (entweder Sie werfen oder eine in Ihrem Code verwendete eingebaute Methode kann auslösen), aber im Falle einer ungeprüften Ausnahmebedingung können Sie auch abfangen, wenn Sie diese Ausnahmebedingung nicht ausgelöst haben.

0
Mohit gupta

Jede Klasse, die die Exception-Klasse erweitert, ist eine Benutzerdefinierte. Überprüfte Ausnahmeklasse, wobei jede Klasse, die RuntimeException erweitert, Ungeprüfte Ausnahmeklasse . Ist. Wie in Benutzerdefinierte Ausnahmebedingungen angegeben, ist das Kontrollkästchen aktiviert oder deaktiviert Ausnahmen Wenn die geprüfte Ausnahme nicht ausgelöst wird (benutzerdefinierte oder integrierte Ausnahme), wird ein Fehler beim Kompilieren angezeigt.

Checked exception sind die Ausnahmen, die zur Kompilierzeit geprüft werden.

Unchecked exception sind die Ausnahmen, die zur Kompilierzeit nicht geprüft werden

0
Astha