处理Java异常的最佳实践

5

我开始学习Java,并编写我的第一个实用类,预计将其投入生产。但是在处理异常时我有些迷茫。在给定的代码行中大约有多少try语句?

代码中应处理多少比例的异常……有没有Eclipse插件?

在try块中包含3-4条语句和捕获异常,还是在try块中包含10-12行代码并随后包括2-3个catch语句来捕获不同类型的异常,例如由文件相关或自己的类或其他第三方类引发的异常……?前者令人不太满意,会让代码臃肿。

是否常见的做法是仅仅在可能抛出异常的代码周围加上try块,或者像文件句柄的使用方式一样在try块内部包含其他代码也可以?

有什么建议吗?


2
你正在走弯路。首先要了解什么是异常及其类型,以及什么是try、catch和throw,然后你就会明白了。 - Android Killer
2
我的建议是:从你的大脑中抹去“try-catch块”的概念。相反,考虑“try-finally块”。在你能够恢复异常或者想要记录并继续执行的地方捕获它们...通常这发生在程序的高层级。 - erickson
首先,你可以在这里查看我的答案:http://stackoverflow.com/questions/7129979/java-exception-handling/7130076#7130076,然后你可以访问http://download.oracle.com/javase/tutorial/essential/exceptions/index.html,这可能是最适合你的教程。 - Pankaj Kumar
3个回答

2

问:"在try块中包含3-4个语句并捕获异常是最佳实践吗?"

我认为首先需要明确异常。

try {
    ...some code that throws exceptions
} catch (Exception ex){
    ex.printStacktrace();
}

上面是处理异常的代码片段。在异常处理中,我们将可能生成异常的代码放在try{}块中,如果try块中的语句生成异常,则会被catch{}块捕获。
问:是否应该在try块中包含3-4个语句并捕获异常?
行数不是由规则确定的,它取决于您的逻辑和程序要求。
以下链接可帮助您清楚Java异常的基本知识:http://marakana.com/bookshelf/java_fundamentals_tutorial/exceptions.html 有关Java异常的最佳实践,请参阅以下文章和QA:Java或C#中异常管理的最佳实践10个最佳异常实践

http://www.wikijava.org/wiki/10_best_practices_with_Exceptions - 已经不存在了 - Angelin Nadar

1

看看Java教程中的这个示例:http://download.oracle.com/javase/tutorial/essential/exceptions/index.html(请注意,这是针对Java 7的)。

在异常处理方面的最佳实践无法用代码比例来表达。首先要学习错误、异常和运行时异常之间的重要区别。错误和异常是Throwable层次结构的两个独立分支。运行时异常是特殊的异常类型,不需要声明,因为它们不会被普通代码处理。一旦你理解了每个异常的作用,你就已经迈出了成功的第一步。

请记住,异常处理不仅仅是最佳实践和常识,还受到风格和观点的影响。有些人喜欢尽早捕获异常,导致代码中有很多try-catch块。其他人则喜欢将更多的代码行放在try块中。

如果您可以使用JDK 7而不是旧版本的Java,请调查try-with-resources结构和multi-catch机制,这两种机制都将有助于使异常处理更加优雅,并减少代码膨胀。


0

我不会计算行数。

try catch 块作为一段代码成功或失败(通常情况下)而存在。因此,您可以将“工作单元”视为包含在一个 try/catch 块中。这与方法的基本定义相同。因此,两者经常可以结合使用。

在一个方法中放置一个 try/catch 块。

初学者的错误(我认为)是创建大量单独的 try/catch 块,几乎每行都有一个。通常,您只需要一个大的 try/catch 块,它包含您要执行的工作单元。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接