java - 在 Java 中捕获异常与抛出异常

标签 java exception try-catch throws

<分区>

所以我有两个关于 java 的一般性问题。第一个是什么时候在方法主体中使用 try/catch 与在声明方法时使用 throws 异常?这是我的意思的一个小例子。这:

public void whileChatting() throws IOException{}

对比

public void closeConnection() {
    try {
    } catch (IOException ioException) {
        ioException.printStackTrace();
    }
}

然后我的第二个问题是什么时候知道捕获或抛出哪种类型的异常?我指的是 IOException 或 EOFException 等异常......

如果有一个很好的链接,有人可以发给我教所有这些(因为它可能比我想象的更复杂),我会像你回答它一样感激。 谢谢。

最佳答案

抛出异常

在你的第一个例子中,

public void whileChatting() throws IOException{}

意味着它只会向调用该函数的任何对象抛出异常。然后可以在使用 try-catch block 调用该方法时捕获它。比如

try{
    whileChatting();
}
catch(IOException e){
    e.printStackTrace();
}

抛出一个方法基本上将它向上传播到链中,因此任何调用该方法的方法也需要包含 throws IOException,否则异常将需要在更高级别的方法中处理(通常通过 try-catch block )。

捕获异常

捕获异常是一种优雅地处理异常的方法。常见的做法是 e.printStackTrace(); 将错误的详细信息打印到控制台,但这并不总是必要的。有时您可能想要执行 System.exit(0) 甚至 System.out.println("Error in method whileCalling()")

使用 catch block ,您可以捕获任何类型的异常!您还可以执行 try-catch-finally block ,它将运行 try block 中的代码,捕获任何异常,无论是否捕获到任何异常,它都会进入 finally block 并运行该代码。

要了解您可能需要捕获的异常,您可以查看可能抛出异常的类的 Javadoc。在那里你会找到一个列表,列出了类可以抛出的所有可能的东西。您也可以只捕获 Exception,这将捕获任何可以想象的异常! (好吧,授予它扩展异常)

最后,您可以像这样将 catch block 链接在一起。

try{
    whileCalling();
}
catch(IOException e){
    //handle this situation
}
catch(FileNotFoundException e){
    //handle this situation
}
catch(Exception e){
    //handle this situation
}

这将像 and else-if block 一样工作并且不会捕获重复项。

所以基本上回答你的问题:

1: throw 异常意味着让其他人处理它,无论这是另一个类、另一个方法,还是只是希望它不会发生否则你的程序会崩溃(非常糟糕的做法)。

2: 使用 try catch block 实际上是按照您认为合适的方式处理异常!打印出堆栈跟踪以进行调试或给用户一个新的提示以重新输入一些东西。 (例如提示用户需要输入文件位置然后抛出 FileNotFoundException)

希望对您有所帮助!

关于java - 在 Java 中捕获异常与抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31215951/

相关文章:

Try 中的 Java 断言与多个 catch

python - 为什么这个 try/except/else 函数返回 None ?

visual-studio-2008 - VS2008 (c#) 中是否有一种方法可以查看所有可能源自方法调用甚至整个 try-catch block 的异常类型?

java - Alfresco 无法处理文件上传

java - 迁移weblogic到tomcat : No JTA UserTransaction available

java - 定期到期通知——如何避免同一条目收到重复通知?

java - 基于对象实例进行类型转换的正确方法

java - 无法从 try-catch 嵌套 for 循环中提取字符串

python - Try/except 异常类型的特定错误

java - 在 jshell-11 中,为什么重新声明的引用变量重置为 null 仍然有类型?