2016-08-28 62 views
1

當我嘗試從方法聲明中拋出一個異常時,我得到錯誤「ClassNotFoundException的Unreachable catch塊,這個異常永遠不會從try語句體中拋出。我可以從方法中捕獲拋出異常嗎?

的代碼是這樣的:

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); 
    } 
} 
} 

我如何能趕上ClassNotFoundException?提前致謝。

+1

爲什麼你想要捕捉一個永遠不會拋出你的'try'block的異常?爲什麼你的方法拋出異常,但它捕捉到它們? –

+0

該方法內部沒有任何可以引發ClassNotFoundException的點。 –

+0

這是因爲編譯器迫使我在方法 –

回答

2

try{...} catch(){...}語句的catch塊只能捕獲由try{...}塊引發的異常。 (或者說異常的超類)

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

但是,你正在嘗試做的基本上是這樣的:

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

因爲沒有在你的try{...}塊扔OtherException的語句,編譯器會給出你一個錯誤,因爲它知道沒有什麼在你的try{...}塊會有史以來拋出異常,所以你不應該嘗試catch東西是永遠不會thrown

在你的情況下,你的try{...}塊沒有東西會拋出ClassNotFoundException,所以你不需要去捕獲它。您可以從代碼中刪除catch (ClassNotFoundException e) {...}以修復錯誤。

+0

中拋出Exception。謝謝Alex。您的信息非常有用。 –

相關問題