Java/Eclipse—在不强制执行的情况下确定可能的异常?
我有你的标准Java/Eclipse—在不强制执行的情况下确定可能的异常?,java,eclipse,exception,exception-handling,Java,Eclipse,Exception,Exception Handling,我有你的标准try/catch声明: try { // Do a bunch of stuff } catch ( Exception e ) { throw e; } 是否有任何方法可以确定可以从我的代码中捕获哪些可能的异常,而不必强制我的代码失败,以查看异常类型e 例如,如果我做了一些HTTP调用,或者我想以不同方式处理的一些JSON内容,我的代码可能如下所示: try { // Do a bunch of stuff } catch ( HttpException e ) {
try/catch
声明:
try
{
// Do a bunch of stuff
}
catch ( Exception e )
{
throw e;
}
是否有任何方法可以确定可以从我的代码中捕获哪些可能的异常,而不必强制我的代码失败,以查看异常类型e
例如,如果我做了一些HTTP调用,或者我想以不同方式处理的一些JSON内容,我的代码可能如下所示:
try
{
// Do a bunch of stuff
}
catch ( HttpException e )
{
// Do something
throw e;
}
catch ( JSONException e )
{
// Do something else
throw e;
}
catch ( Exception e )
{
throw e;
}
但也许我在代码中做了很多事情,我不确定(由于缺乏Java经验)可能会捕获到哪些异常
有没有任何可能的方法可以使用Eclipse查看一组代码并获得可能捕获的每种可能的异常类型的列表?有两种类型的异常:选中的和未选中的 您无法获得所有未检查异常的列表,因为它们可能不会告诉您它们是什么。(如果您阅读正在使用的库的文档,他们可能会这样做。)
对于检查过的异常,如果不能捕获所有异常,则无法编译代码。我只需删除
异常e
块并使用它进行编译。诚实地捕捉每个异常是一个坏主意,除非你真的准备好处理它。有两种类型的异常:已检查和未检查
您无法获得所有未检查异常的列表,因为它们可能不会告诉您它们是什么。(如果您阅读正在使用的库的文档,他们可能会这样做。)
对于检查过的异常,如果不能捕获所有异常,则无法编译代码。我只需删除
异常e
块并使用它进行编译。诚实地捕获每个异常是一个坏主意,除非您真的准备好处理它。在NetBeans中,可能还有Eclipse中,如果您只是输入代码而没有任何try-catch块,IDE将提示您将抛出哪些异常,并提供将语句包装在try-catch块中。这可能是捕获所有可能异常的最简单方法。在NetBeans和Eclipse中,如果只输入代码而没有任何try-catch块,IDE将提示您将抛出哪些异常,并提供在try-catch块中封装语句的功能。这可能是捕获所有可能异常的最简单方法。无法获取可能未检查异常的列表。由于它们不是在任何地方声明的(它们是动态创建的),如果没有非常特定的代码分析器工具,这是不可能的——即使这样,它也可能无法从编译的库类中捕获一些
<> P>对于棘手的事情进行预测的例子,考虑分配内存的任何东西都会抛出内存异常,甚至可以反例实例化异常,这几乎不可能用任何静态分析工具找到。
如果你真的很偏执,你可以捕获RuntimeException,这应该会得到你想要处理的所有未检查的异常——这不是一个推荐的策略,但可以防止你的程序因未知/看不见的未来错误而失败
将抛出的异常放入注释中是一种很好的形式,但这种做法并没有得到一致遵守。无法获得可能未检查异常的列表。由于它们不是在任何地方声明的(它们是动态创建的),如果没有非常特定的代码分析器工具,这是不可能的——即使这样,它也可能无法从编译的库类中捕获一些 <> P>对于棘手的事情进行预测的例子,考虑分配内存的任何东西都会抛出内存异常,甚至可以反例实例化异常,这几乎不可能用任何静态分析工具找到。 如果你真的很偏执,你可以捕获RuntimeException,这应该会得到你想要处理的所有未检查的异常——这不是一个推荐的策略,但可以防止你的程序因未知/看不见的未来错误而失败
将任何抛出的异常放入注释中是一种很好的形式,但这种做法并没有得到一贯遵守。它能告诉您未声明的未经检查的异常吗?只要它是调用路径中的方法定义直接公开的,它就会建议它们。@glowcoder否,它们是未经检查的,而不是在可能抛出它们的方法的签名中。正如Bill K所说,它们可以以任何方式创建,包括动态创建。它能告诉您未声明的未经检查的异常吗?只要它是由调用路径中的方法定义直接公开的,它就会建议它们。@glowcoder不,它们是未经检查的,并且不在可能抛出它们的方法的签名中。正如Bill K所说,它们可以以任何方式创建,包括动态创建。