Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否每个异常都有一个必需的try-catch?_Java_Exception_Try Catch - Fatal编程技术网

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

Java 是否每个异常都有一个必需的try-catch?,java,exception,try-catch,Java,Exception,Try Catch,一个简单的问题,我找不到答案。 Java中的每个异常都需要使用try-catch吗?还是只针对FileNotFoundException 很多异常(IndexOutOfBoundException、ArtihmeticException、IlligalArgumentException、NullPointerException)都表示不需要异常,但FileNotFoundException需要异常)。。。我找不到答案,哪些需要试一试,哪些不需要试一试。不,不是每个异常都需要试一试。每个选中的异常

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


很多异常(IndexOutOfBoundException、ArtihmeticException、IlligalArgumentException、NullPointerException)都表示不需要异常,但FileNotFoundException需要异常)。。。我找不到答案,哪些需要试一试,哪些不需要试一试。

不,不是每个异常都需要试一试。每个选中的异常都需要一个try-catch。例如,NullPointerException是未经检查的异常,因此它不需要try-catch,而FileNotFoundException是已检查的,因此它确实需要一个try-catch。您还可以将“throws”添加到方法签名中,从而避免需要try-catch。

仅检查异常显式需要捕获它,对于其他所有类型的异常,您可以将“throws”添加到方法签名中。

不一定需要为异常设置
try/catch
块。相反,您可以
将它们扔给能够正确处理异常的人

有两种异常:选中和未选中。选中的异常可以被认为是编译器发现的异常,并且编译器知道它有可能发生,因此您需要
捕获
抛出它。例如,打开一个文件。它有可能失败,而编译器知道这一点,因此您必须
catch
throw
可能的
IOException

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

请注意,所有选中的建议必须被捕获或扔到能够处理它的地方;如果不这样做,程序将无法编译。如果你把它扔到一个无法处理的地方,那么如果它发生,你的程序很可能会崩溃

还请注意,未经检查的异常(例如:在运行时发生的异常,通常通过错误的用户输入或诸如此类的方式)通常也会使程序崩溃。因此,当可能出现错误时,通常最好使用
try/catch
,但不必这样做

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

阅读:

需要处理或抛出基本检查过的异常 未经检查的异常和错误可能会被处理或抛出(尽管处理错误通常被认为是不好的做法)

Checked exception是从java.lang.exception继承的所有内容

未经检查的异常是从java.lang.RuntimeException继承的所有内容


Error是从java.lang.Error继承的所有内容

是的,但是如果不想在方法中处理它,可以使用
throws
关键字将异常传递给方法的调用方。例如:

void execption() throws Exception {
    throw new Exception();
}

void caller() {
    try {
        execption();
    } catch (Exception e) {
        e.printStackTrace();
    }
}
Object obj = null;

obj.hashCode();// if you think a NPE will be thrown you can use a try/catch here
编辑:我对我的java有点生疏,就像josh说的,你可以有不需要尝试/捕获的未检查异常,比如
NullPointerException
,但是如果你认为可能会抛出未检查的异常,你可以添加一个。例如:

void execption() throws Exception {
    throw new Exception();
}

void caller() {
    try {
        execption();
    } catch (Exception e) {
        e.printStackTrace();
    }
}
Object obj = null;

obj.hashCode();// if you think a NPE will be thrown you can use a try/catch here

当您显式调用的方法引发异常时,您必须使用
try….catch
循环。但在您给出的列表中,所有运行时异常都存在。有时,当一个程序的输入不是预期的,或者该程序被用于一些它不打算用于的用途时,它们会被抛出。这些将不需要一个
try….catch
循环。

你能再澄清一点吗。在这里阅读[Exception oracle doc]否。查找已检查的与未检查的异常。我在帖子中添加了更多信息。意外异常是描述非运行时异常的糟糕术语。你说得对。正确的术语是“选中”和“未选中”。我将相应地编辑答案。