Exception 捕捉异常类(每个可能的异常)是错误的吗?

Exception 捕捉异常类(每个可能的异常)是错误的吗?,exception,exception-handling,Exception,Exception Handling,我知道,这样的问题可能取决于程序员打算让他的程序做什么,但在学校我们被教导绝不抛出或捕获异常(类),而是确保它抛出一个子类,更具体地说是我们预期可能发生的运行时错误(例如IllegalArgumentException)。然而,我现在正在工作,在“现实世界”中,我在我工作的代码中看到了很多场景,以前的程序员对方法中的所有内容都抛出了Exception,或者像这样捕获Exception,而不是它的一个更具体的子类 所以我想知道,像这样扔东西和抓东西可以吗?这样做是不是很糟糕的编程?正如您所学到的,

我知道,这样的问题可能取决于程序员打算让他的程序做什么,但在学校我们被教导绝不抛出或捕获异常(类),而是确保它抛出一个子类,更具体地说是我们预期可能发生的运行时错误(例如IllegalArgumentException)。然而,我现在正在工作,在“现实世界”中,我在我工作的代码中看到了很多场景,以前的程序员对方法中的所有内容都抛出了
Exception
,或者像这样捕获
Exception
,而不是它的一个更具体的子类


所以我想知道,像这样扔东西和抓东西可以吗?这样做是不是很糟糕的编程?

正如您所学到的,这是一种糟糕的做法


该规则的一个主要异常是一个顶级异常处理程序(用于捕获未处理的异常)-其目的是记录异常,以便开发人员稍后可以读取这些异常并用于修复应用程序(通常会重新刷新以使应用程序崩溃,而不是使其处于不一致的状态).

这样做没有错,但会使调试过程变得非常困难。许多人会捕获exception类并记录exception.Message。没有足够的详细信息,尤其是如果您在大型系统上工作,而在这些系统中,您无法始终单步执行实时代码等,这将是一项乏味的任务


我倾向于捕获特定的异常并相应地处理它们,但我也捕获异常类以确保所有异常都被捕获(对象可能会被更改,以便在未来的框架版本中包含更多的异常).

我的想法是,处理异常的方式也应该取决于您正在创建的应用程序的类型。例如,如果您正在开发某种框架或库,您不应该尝试打印错误消息或记录错误消息,您必须抛出它们,因为这将是使用fra的其他开发人员的责任mework/library在异常使用您的代码时优雅地处理异常


如果您正在开发某种前端应用程序,那么在异常处理方面应该更加谨慎。我认为最好在可能的情况下使用您自己的异常类,因为这将有助于您以后确定应用程序中的错误或运行时问题。当您处理异常时,您应该始终从更具体的一般异常的异常。最后,您应该处理“异常”的异常超级类,这样可以确保应用程序不会崩溃,最好在应用程序的主入口点上有一个try-catch块。处理异常记录错误时发生的情况是以后诊断错误时的一个好做法。

简短回答:从不捕捉异常。长回答:从不捕捉异常例外,抛出是好的。