当我试图从方法声明中抛出一个异常时,我会得到一个错误“ClassNotFoundException无法到达的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
?提前谢谢。
发布于 2016-08-28 18:44:23
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
,所以编译器会给您一个错误,因为它知道nothing在您的try{...}
块中将抛出该异常,所以您不应该尝试将永远不是thrown
的东西放到catch
上。
在您的示例中,try{...}
块中的任何内容都不会抛出一个ClassNotFoundException
,因此不需要捕获它。您可以从代码中删除catch (ClassNotFoundException e) {...}
以修复错误。
https://stackoverflow.com/questions/39194478
复制相似问题