当前位置: 首页 > 知识库问答 >
问题:

在 Java 中捕获与引发异常 [重复]

习海
2023-03-14

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

public void whileChatting() throws IOException{}

对抗

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

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

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

共有3个答案

花品
2023-03-14

当您想要处理它的原因时,您可以使用try/catch,否则您应该传播它,以便可以在正确的时间处理它。

javadoc和tutorialspoint异常是一个好的开始

翟学文
2023-03-14

两个好的经验法则:

>

  • 您应该只捕获实际可以处理的异常

    早扔/晚抓

    没有硬性而快速的答案。

    一般来说,您使用“throws”的频率可能比使用自定义“try/catch”的频率要高得多。简单地说,因为“知道如何恢复”的“决策”模块相对较少,但相应地,您会有“许多”可能引发异常的模块。

  • 乌杰
    2023-03-14

    在你的第一个例子中,

    public void whileChatting() throws IOException{}
    

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

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

    抛出一个方法基本上会将其传播到链上,因此任何调用此方法的方法都需要包含抛出IOException,或者异常需要在更高级别的方法中处理(通常通过try-catch块)。

    捕捉异常是一种优雅地处理异常的方式。常见的是< code > e . printstacktrace();将错误的详细信息打印到控制台,但这并不总是必要的。有时,您可能希望执行< code>System.exit(0)甚至< code>System.out.println("方法中的错误whileCalling()")

    使用捕获块,您可以捕获任何类型的异常!你还可以做一个 try-catch-final 块,它将运行 try 块中的代码,捕获任何异常,无论是否捕获任何异常,它都将进入 finally 块并运行该代码。

    要知道您可能需要捕获什么异常,您可以查看可能抛出异常的类的Javadocs。在那里您会找到该类可以抛出的所有可能内容的列表。您还可以只捕获Exception,它将捕获任何可以想象到的异常!(好吧,同意它扩展了异常)

    最后,您可以像这样链接catch块。

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

    这将像否则一样工作 - 如果阻止并且不捕获重复项。

    因此,基本上回答您的问题:

    1:< code > throw 异常意味着让其他人来处理它,不管这是另一个类,另一个方法,或者只是希望它不要发生,否则你的程序会崩溃(相当糟糕的做法)。

    2:使用try catch块实际上是以你认为合适的方式处理异常!打印出用于调试的stacktrace,或者给用户一个新的提示来重新输入一些东西。(例如,提示用户需要输入文件位置,然后抛出< code > FileNotFoundException )

    希望这有帮助!

     类似资料:
    • 我正在实现自定义'AuthenticationProvider'。如果没有经过身份验证,我将在'authenticate'函数中抛出异常,如下所示。 我有全局异常处理程序,如下所示。 当在'authenticate'函数内部引发异常时,不会调用全局异常处理程序。对于所有其他例外情况,它正在被调用。我想在全局异常处理程序中捕获异常并返回自定义错误消息。我怎么能那样做?感谢任何帮助。提前道谢。

    • 无法在中包装流对象。 我试过这样: Eclipse开始抱怨在下划线,并建议它需要用try/catch包围

    • 问题内容: 我想知道其他SOer在实践中如何倾向于处理和/或防止异常。 您在什么情况下可以防止例外情况,以及如何防止例外情况?在什么情况下您会捕获异常? 通常,我通常会说“ NullPointerExceptions”(和其他类似的事件) 我发现在大多数情况下,这比使用try-catch块所涉及的所有事情要小。 当潜在异常更复杂或数量更多时,我使用try-catch块。 问题答案: 我认为,仅当引

    • 每当我的VNC连接被终止时(每当我重新启动VM时),我都试图捕捉一个异常,并且我试图忽略它以继续我的Jython脚本。我不知道如何编写try catch语句来捕获异常,因为它起源于Java。这是一个sikuliX脚本。

    • 本节介绍如何使用三个异常处理程序组件(try、catch 和 finally)来编写异常处理程序。 然后,介绍了 Java SE 7中引入的 try-with-resources 语句。 try-with-resources 语句特别适合于使用Closeable的资源(例如流)的情况。 本节的最后一部分将通过一个示例来分析在各种情况下发生的情况。 以下示例定义并实现了一个名为ListOfNumbe