java - 在Java中,为什么要在catch block 中指定异常类型?

标签 java exception try-catch

我一直在工作中使用 Java 进行编码,但我所知道的关于 Java 的一切都来自于在我需要知道的时候谷歌搜索如何做任何事情。我以前在学校学过 C/C++,现在我刚刚开始学习 Java 中的异常处理。

在Java中,为什么要在catch block 中指定异常类型?这样做有什么好处?仅使用 Exception 而不是“IOException”有哪些缺点?

编码时什么时候应该使用 try/catch block ?我注意到我进入了只对逻辑部分进行编码的模式,并且只有在编码时显示错误并告诉我添加它时,或者当我运行代码并且程序由于异常而中途退出时,我才添加 try/catch,然后我找到它在代码中发生的位置,并在那里添加 try/catch block 来“处理异常”,以使代码继续运行。这是人们通常决定在 try/catch 中添加何处的方式吗?有没有更有效的方法,例如“在代码中执行某些操作时,添加 try/catch”?

非常感谢!

编辑: 什么时候应该使用 try/catch block 以及什么时候应该使用 private void method() throws Exception ?除了语法之外,两者还有什么区别?

最佳答案

许多相对较新的程序员都认为所有异常都是不好的,但事实并非如此。异常(exception)既不好也不坏。他们只是提供信息。

NullPointerExceptionsFileNotFoundExceptions .

通常(并非总是),如果 NullPointerException抛出,这意味着您的代码中某处存在错误。您忘记初始化变量,没有检查标志是否为真,等等。当抛出这些异常时,您通常希望程序失败并崩溃,因为它遇到了意外行为。您希望失败是响亮且明显的,因为如果程序在空指针之后没有立即失败,则程序可能会变得非常古怪,并且您将很难找到问题。

但是,FileNotFoundExceptions一般是相反的。

想象一下,如果在程序中的某个时刻,您提示用户输入文件。用户可能会或可能不会输入有效文件,但无论如何程序都不应该在此处崩溃。相反,如果找不到文件,应该通知用户,并再次提示。这通常就是为什么你有 catch block ,所以如果抛出异常,你可以处理它并继续(通过显示对话框/消息/其他内容)。

但是,如果 NullPointerException被抛出这里,你肯定希望你的程序崩溃(因为它可能是你的代码中的一个错误)。这就是为什么 catch block 强制您指定异常,以便您可以处理一些异常(例如 FileNotFoundException ),并让其他异常通过(例如 NullPointerException )

通常,如果您的程序能够从异常中恢复,那么您希望捕获异常。这就是(应该是)java强制你try/catch的原因某些异常(exception)情况。大多数异常都是您的程序应该能够恢复的异常(尽管有时您可能希望失败,要么声明您的方法抛出该异常,要么将捕获的异常包装在 RuntimeException 中)。

关于java - 在Java中,为什么要在catch block 中指定异常类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24336123/

相关文章:

java - 在 JAX-RS 中使用 @Context、@Provider 和 ContextResolver

java - 如何实现波斯日历

c# - 实现接口(interface)时是否需要处理已记录异常的引发

.net - .NET 中的 Try-Catch-Continue

java - 在构造函数中尝试/捕获

java - 如何修复以下异常 com.google.appengine.api.labs.modules.ModulesException : Instance id unavailable

java - 垃圾收集器何时会删除使用单例模式的对象的实例?

c++ - 委托(delegate)构造函数抛出时是否调用析构函数?

php - 查询不同服务器上的数据库

java - 从finally block 访问时try block 内的变量范围?