2016-08-28 1 views
1

Wenn ich versuche, eine Ausnahme von Methodendeklaration zu werfen, erhalte ich den Fehler "Unreachable catch block für ClassNotFoundException. Diese Ausnahme wird niemals aus dem try-Anweisung body geworfen".Kann ich eine Wurf-Ausnahme von der Methode abfangen?

Der Code ist dies:

public class MenuSQL { 
    private static String sentence = ""; 
    private static int option; 
    Statement sentenceSQL = ConnectSQL.getConexion().createStatement(); 

public MenuSQL(int option) throws ClassNotFoundException, SQLException { 
    super(); 
    this.option = option; 
    try { 
     System.out.print("Introduce the sentence: "); 
     System.out.print(sentence); 
     sentence += new Scanner(System.in).nextLine(); 
     System.out.println(MenuSentence.rightNow("LOG") + "Sentence: " + sentence); 

     if (opcion == 4) { 
      MenuSentence.list(sentence); 
     } else { 
      sentenceSQL.executeQuery(sentence); 
     } 
    } catch (SQLException e) { 
     System.out.println(MenuSentence.rightNow("SQL") + "Sentence: " + sentence); 
    } catch (ClassNotFoundException e) { 
     System.out.println(MenuSentence.rightNow("ERROR") + "Sentence: " + sentence); 
    } 
} 
} 

Wie kann ich ClassNotFoundException fangen? Danke im Voraus.

+1

Warum möchten Sie eine Ausnahme abfangen, die niemals in Ihren 'try'block geworfen werden kann? Und warum wirft Ihre Methode die Ausnahme, obwohl sie sie fängt? –

+0

Es gibt einfach keinen Sinn innerhalb der Methode, dass eine ClassNotFoundException ausgelöst werden könnte. –

+0

Es ist, weil Compiler mich zwingen, diese Ausnahme in Methode –

Antwort

2

Der catch-Block einer try{...} catch(){...}-Anweisung kann nur Ausnahmen abfangen, die vom try{...}-Block ausgelöst werden. (Oder eine übergeordnete Klasse dieser Ausnahme)

try { 
    Integer.parseInt("1"); 
    //Integer.parseInt throws NumberFormatException 
} catch (NumberFormatException e) { 
    //Handle this error 
} 

jedoch, was Sie versuchen, dies zu tun ist im Grunde:

try { 
    Integer.parseInt("1"); 
    //Integer.parseInt throws NumberFormatException 
} catch (OtherException e) { 
    //Handle this error 
} 

Da keine der Aussagen in Ihrem try{...} Blockwurf OtherException, wird der Compiler geben Sie einen Fehler, weil es weiß, dass nichts in Ihrem try{...} Block wird jemals diese Ausnahme werfen, so sollten Sie nicht versuchen, catch etwas, das nie ist thrown.

In Ihrem Fall wirft nichts in Ihrem try{...} Block eine ClassNotFoundException, so dass Sie es nicht fangen müssen. Sie können den Code aus Ihrem Code entfernen, um den Fehler zu beheben.

+0

Dank Alex zu werfen. Ihre Informationen sind sehr nützlich. –

Verwandte Themen