每个例外都有必要的试用吗?

You*_*uri 15 java exception try-catch

一个简单的问题,我找不到答案.Java中的每个异常都需要使用try-catch吗?或者仅适用于FileNotFoundException?

很多异常(IndexOutOfBoundException,ArithmeticException,IlligalArgumentException,NullPointerException)都表示他们不需要Exception,但是FileNotFoundException会这样做...而且我找不到答案,哪些不需要try-catch .

Aif*_*ify 43

try/catch对于您的例外,并不是绝对需要一个块.相反,您可以将throw它们发送给能够正确处理异常的人.

有两种例外:已选中和未选中.Checked异常可以被认为是编译器找到的异常,并且编译器知道它有可能发生,所以你需要catch或者throw它.例如,打开文件.它有可能失败,编译器知道这一点,所以你被迫catch或者throw可能IOException.

未经检查的异常可被视为有可能发生的异常,但根据您的代码,编译器不知道.换句话说,这是一个编程错误.例如,如果您正在接受用户输入并期望一个数字,并且用户输入您不期望的内容(例如字符串),则您的程序将抛出一个NumberFormatException.您可以预测这些场景,try/catch并在它们发生之前尝试避免它们.很少见到一个人添加throws NullPointerExceptionthrows NumberFormatException(或抛出任何其他未经检查的异常,就此而言).这是允许的,但明确地创建该异常是很奇怪的,并且大多数人会说这是不好的编码风格.

请注意,必须捕获所有已检查的建议或将其抛给可以处理它的内容; 如果你不这样做,你的程序将无法编译.如果你把它扔到无法处理的东西上,那么你的程序如果发生就会崩溃.

另请注意,未经检查的异常(例如:在运行时发生的异常,通常是通过错误的用户输入或诸如此类)也会导致程序崩溃.因此,try/catch当某些东西可能出错时,通常是个好主意,但你不必这样做.

另外值得注意的是,Checked异常是Exception的子类,而Unchecked异常是RuntimeException的子类,RuntimeException本身是Exception的子类.这意味着,如果你真的想要,那么单个try {} catch (Exception e) {}会捕获你的程序可能抛出的每个异常.当然,这被认为是处理异常的可怕方式,您应该分别捕获每个异常,以便您可以单独处理它们.请尽量不要使用它.