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

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

很多exception(IndexOutOfBoundException,ArithmeticException,IlligalArgumentException,NullPointerException)都表示他们不需要Exception,但是FileNotFoundException确实如此)……我找不到答案,哪些不需要try-catch 。

对于您的例外,并不是绝对需要一个try/catch块。 相反,您可以throw它们throw能够正确处理exception的人。

有两种例外:已选中和未选中。 Checkedexception可以被认为是编译器找到的exception,并且编译器知道它有可能发生,所以你需要catchthrow它。 例如,打开文件。 它有可能失败,编译器知道这一点,所以你不得不catchthrow可能的IOException

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

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

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

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

不,并非每个例外都需要试一试。 每个检查过的exception都需要try catch。 例如,NullPointerException是一个未经检查的exception,因此它不需要try-catch,而是检查FileNotFoundException,因此它确实需要一个。 您还可以向方法签名添加“throws”,从而避免需要try-catch。

阅读: https : //docs.oracle.com/javase/tutorial/essential/exceptions/

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

检查exception是从java.lang.Exceptioninheritance的所有内容

未经检查的exception是从java.lang.RuntimeExceptioninheritance的所有内容

错误是从java.lang.Errorinheritance的所有内容

只有Checkedexception显式需要捕获它,对于其他所有类型的exception,您可以使用“throws”方法签名。

当您调用的方法显式抛出exception时,您必须使用try....catch循环。 但是,如果您给出的列表是所有运行时exception。 当有时某个程序具有不期望的输入或者程序被用于某些不适合的用途时,它们会被抛出。 这些不需要try....catch循环。

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

 void execption() throws Exception { throw new Exception(); } void caller() { try { execption(); } catch (Exception e) { e.printStackTrace(); } } 

编辑:我的java有点生疏,就像josh说你可以有未经检查的exception,不需要像NullPointerException那样的try / catch,但如果你认为可能会抛出未经检查的exception,你可以添加一个。 例:

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