【问题标题】:Can I catch a throw exception from method?我可以从方法中捕获抛出异常吗?
【发布时间】:2017-01-04 18:57:26
【问题描述】:

当我尝试从方法声明中抛出异常时,我收到错误“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?提前致谢。

【问题讨论】:

  • 为什么要捕获一个永远不会在tryblock 中抛出的异常?为什么你的方法会抛出异常,尽管它会捕获它们?
  • 在方法中根本没有任何意义可以抛出 ClassNotFoundException。
  • 这是因为编译器强迫我在方法中抛出那个异常

标签: java exception methods try-catch throws


【解决方案1】:

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{...} 块中的nothing永远 抛出那个异常,所以你不应该尝试catch 一些从来不是thrown 的东西。

在您的情况下,try{...} 块中的任何内容都不会引发ClassNotFoundException,因此您无需捕获它。您可以从代码中删除 catch (ClassNotFoundException e) {...} 来修复错误。

【讨论】:

  • 谢谢亚历克斯。你的信息很有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-28
  • 2012-12-22
  • 1970-01-01
  • 2011-06-27
  • 1970-01-01
相关资源
最近更新 更多