Java 是否每个异常都有一个必需的try-catch?
一个简单的问题,我找不到答案。 Java中的每个异常都需要使用try-catch吗?还是只针对FileNotFoundExceptionJava 是否每个异常都有一个必需的try-catch?,java,exception,try-catch,Java,Exception,Try Catch,一个简单的问题,我找不到答案。 Java中的每个异常都需要使用try-catch吗?还是只针对FileNotFoundException 很多异常(IndexOutOfBoundException、ArtihmeticException、IlligalArgumentException、NullPointerException)都表示不需要异常,但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]否。查找已检查的与未检查的异常。我在帖子中添加了更多信息。意外异常是描述非运行时异常的糟糕术语。你说得对。正确的术语是“选中”和“未选中”。我将相应地编辑答案。