当前位置: 首页 > 面试题库 >

是否每个异常都有必需的try-catch?

凌蕴藉
2023-03-14
问题内容

一个简单的问题,我找不到答案。Java是否需要使用try-catch的每个异常?还是仅针对FileNotFoundException?

很多异常(IndexOutOfBoundException,ArithmeticException,IllligalArgumentException,NullPointerException)都说它们不需要异常,但FileNotFoundException却需要)…而且我找不到答案,不需要try-
catch 。


问题答案:

并不是绝对需要try/catch为您的例外设置一个阻止。相反,您可以将throw它们交给能够正确处理异常的人。

有两种例外:已检查和未检查。检查异常 可以考虑
一个由编译器发现,编译器知道它有发生的机会,所以你需要catch或者throw它。例如,打开一个文件。它有机会失败,并且编译器知道这一点,因此您不得不这样做catchthrow可能这样做IOException

未检查的异常 可以被认为 是有可能发生的异常,但是根据您的代码,编译器并不知道。换句话说,这是 编程错误
。例如,如果您接受用户输入并期望输入数字,而用户输入了您未期望的内容(例如字符串),则程序将抛出NumberFormatException。您可以预测这些情况,并try/catch尽力避免它们发生。很少有人看到有人添加throws NullPointerExceptionthrows NumberFormatException(或抛出任何其他未经检查的异常)。允许,但是显式创建该异常很奇怪,大多数人会说这是不好的编码风格。

请注意,所有“已检查”建议都 必须 被捕获或扔给可以处理的建议;如果不这样做,程序将无法编译。如果将其扔到无法处理的地方,那么程序可能会崩溃。

还要注意,未经检查的异常(例如,在运行时发生的异常,通常是由于用户输入错误或诸如此类的错误)通常也会使程序崩溃。因此,通常在有可能发生问题的情况下使用它是一个好主意try/catch,但是
您不必这样做

还值得注意的是,虽然Checked异常是Exception的子类,Unchecked异常是RuntimeException的子类,但RuntimeException本身是Exception的子类。这意味着,如果您确实愿意,那么一个函数try {} catch (Exception e) {}将捕获程序可能抛出的每个异常。当然,这被认为是处理异常的一种可怕方法,您应该分别捕获每个异常,以便可以分别处理它们。请尽量不要使用它。



 类似资料:
  • 我有一个方法,它使用< code>java.util.Date和< code>java.util.Calendar对象为我提供时区的当前时间,我的一个同事建议添加try catch with < code > Exception e to catch。但是当我在google上搜索这些类的内置方法抛出的异常时,我没有发现任何异常。 我还需要用try和catch来包装代码吗???块是否需要try-ca

  • 是否每个div、section、main和article都需要有role属性来实现可访问性?只是问因为一个同事提到了,现在我觉得我要重做很多标记。例如,如果您使用div来设计样式呢? 假设我有一个看起来像这样的HTML: 在这种情况下是否需要role=“heading”?

  • 问题内容: 如果是这样,为什么会发生此错误?该对象不是或如图所示。 我使用调试我的应用,这张照片摄于。 快速配置: 感谢您的意见,现在我发现是,但新的问题是,如何使再次作品?我想返回如下字符串: 如何重新签署适当的方法? 我尝试了undefined ,不好。看到: 问题答案: JS中的每个对象是否都有toString()方法? 否。只有那些继承自(如所有普通对象一样)或自行定义(或从其自定义原型继

  • 我正在执行多个ajax调用,我想在显示表单之前完成所有这些调用。如果有错误,我想停止处理,只显示遇到的第一个错误。我谷歌了很多文章,包括StackOverflow上的文章,这些文章展示了如何链接当时的语句。但是似乎我必须给每个语句都附加一个捕获,否则只捕获最后一个语句中的错误。在本例中,Lookup是一个返回promise的异步调用,ShowError处理错误: 假设至少有一个错误,是否有任何方法

  • 我使用spring集成和amqp实现了请求/回复。由于某些原因,客户机抛出异常,处理请求可能需要很长时间(在某些情况下甚至需要一个小时)- 我的客户端配置如下。 我相信回复超时默认值是-1,表示无限期等待,但不确定为什么它不工作,任何帮助都将不胜感激。 此外,在amqp中实施如此长时间的等待操作是否存在任何已知问题,或者应该没问题? 非常感谢。

  • 问题内容: 考虑以下代码: 无需添加方法签名即可编译该代码。(它与同样表现到位,太)。 我理解为什么 可以 安全地运行它,因为实际上不能将其引发在块中,因此不能引发已检查的异常。我有兴趣知道在何处指定此行为。 并非永远都不会达到目标:以下代码也会编译: 但是,如果抛出一个检查的异常,它不会像我期望的那样编译: 在JLS Sec 11.2.2中 ,它说: 一,其抛出的表达式语句(§14.18)具有静