2016-08-28 65 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。您的信息非常有用。 –

相关问题