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

标签 java exception try-catch

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

很多异常(IndexOutOfBoundException、ArithmeticException、IlligalArgumentException、NullPointerException)都说他们不需要异常,但 FileNotFoundException 需要)...我找不到答案,哪些需要,哪些不需要尝试捕捉。

最佳答案

并非绝对需要为异常设置一个 try/catch block 。相反,您可以将它们throw 给能够正确处理异常的人。

有两种异常:已检查和未检查。 Checked异常可以被认为是编译器发现的异常,编译器知道它有可能发生,所以你需要catchthrow 它。例如,打开一个文件。它有可能会失败,并且编译器知道这一点,因此您不得不捕获抛出可能的IOException

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

请注意,所有已检查的建议必须被捕获或扔给可以处理它的东西;如果你不这样做,你的程序将无法编译。如果你把它扔给无法处理的东西,那么你的程序很可能会在它发生时崩溃。

另请注意,未经检查的异常(例如:在运行时发生的异常,通常是由于错误的用户输入或诸如此类的原因)通常也会使您的程序崩溃。因此,当某些事情可能出错时使用 try/catch 通常是个好主意,但您不必

另外值得注意的是,虽然已检查异常是 Exception 的子类,未检查异常是 RuntimeException 的子类,但 RuntimeException 本身是 Exception 的子类。这意味着如果您真的想要,单个 try {} catch (Exception e) {} 将捕获您的程序可能抛出的每一个异常。诚然,这被认为是一种可怕的处理异常的方法,您应该分别捕获每个异常,以便单独处理它们。请尽量不要使用它。

关于java - 是否每个异常都有一个必需的 try-catch?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29851253/

相关文章:

java - actionPerformed 跳过一步

c++ - 毫无异常(exception)地编写 C++ 吗?

c# - 空消息异常

python - 如何在记录错误的同时向用户显示错误?

javascript - 返回异常比在异步回调链中使用 try catch block 有什么优势?

java - url 编码需要 3 个 try block 吗?

java - IntelliJ无法在Scala中识别TypeTag

java - 有没有办法创建键为大写的 JSON 对象?

java - 调整在 java 中读取大型 InputStream 的性能

php - 如何在 PHP 中有效地使用 try...catch block