0

每次遇到java异常,我总是陷入两难的境地,是直接抛出异常还是捕获异常。如果捕获异常,是打印堆栈跟踪还是在catch块中做更多的工作?例如,我正在逐行读取文件,函数BufferedReader.readLine()抛出一个IOException,它似乎是一个已检查(与未检查异常相比)异常,因为用户被告知要明确处理此异常,对吧?虽然我必须处理它,但似乎我只能打印堆栈跟踪,嗯,这真的很奇怪。我应该捕获还是抛出这个异常?如果我抓住它,我应该在 catch 块中做什么?

4

3 回答 3

0

您可以执行以下操作:

  1. 在日志文件中记录异常信息。您可以使用以下方法填充异常信息。

    public String populateExceptionStackTrace(Exception e) { StringBuilder sb = new StringBuilder(); sb.append(e.toString()).append('\n'); for (StackTraceElement elem : e.getStackTrace()) { sb.append("\tat").append(elem).append('\n'); } 返回 sb.toString(); }

  2. 如果 InputStream 不为空,请尝试关闭它。

  3. 用有意义的消息抛出你自己的异常,让用户知道发生了什么。

于 2013-09-04T01:55:09.307 回答
0

这是关于哪个部分负责此 Exception

例如,如果您正在将工具包开发为 jar,也许您应该将其IOException 放入类似 的方法中PrasadIOUtils.ReadFile(String path),该方法应该只提供读取文件的功能,而不是处理异常。

相反,您应该在代码中调用方法Exception时捕获。因为这是您的逻辑部分,而您是负责处理的人,以使您自己的项目更加健壮和容错。PrasadIOUtils.ReadFile(String path)Exception

这只是我的理解,希望对您有所帮助。:)

PS 如果您仍然对除了打印期望的堆栈跟踪之外别无他法感到困惑,您可以谷歌异常链接以获取更多信息。这是一个 java 设计模式,也许它会让你对Exception.

于 2013-09-04T02:04:16.780 回答
0

它不仅仅是打印堆栈跟踪,

  • 您可以将异常信息放在单独的日志中
  • 万一出现异常,如果您正在编写或任何您想要的文件,您可以关闭并删除该文件。

如果你回避异常,调用方法将不得不处理它。

于 2013-09-04T01:46:47.243 回答