相关疑难解决方法(0)

271
推荐指数
5
解决办法
18万
查看次数

为什么捕获Throwables时会捕获Java中的异常?

我们最近遇到了一个Java服务器应用程序的问题,其中应用程序抛出了未捕获的错误,因为Error是Throwable的一个单独的子类,我们只捕获异常.

我们通过捕获Throwables而不是Exceptions解决了当前的问题,但是这让我想到为什么你想要捕获Exceptions而不是Throwables,因为你会错过错误.

所以,当你能捕获Throwables时,你为什么要捕捉异常呢?

java

64
推荐指数
5
解决办法
2万
查看次数

是"抛出可扔"的好习惯

在过去,我会用以下方法阅读大量代码:

public Object doSomething() throws Throwable {
    ...
}
Run Code Online (Sandbox Code Playgroud)

通常的做法是这样做吗?

什么是利弊?

throws Trowable 在我看来,像"特工橙"的方式让异常完成了

编辑


  1. 处理方法中的预期异常

  2. 抛出意外的异常(逐个)

  3. 不关心错误

这是要走的路吗?

java

29
推荐指数
2
解决办法
3万
查看次数

在Java中扩展Throwable

Java允许您创建一个全新的子类型Throwable,例如:

public class FlyingPig extends Throwable { ... }
Run Code Online (Sandbox Code Playgroud)

现在,很少,我可以这样做:

throw new FlyingPig("Oink!");
Run Code Online (Sandbox Code Playgroud)

当然还有其他地方:

try { ... } catch (FlyingPig porky) { ... }
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  • 这是一个坏主意吗?如果是这样,为什么?
    • 如果这是一个坏主意,可以做些什么来阻止这种子类型?
    • 由于它不可预防(据我所知),可能导致什么灾难?
  • 如果这不是一个坏主意,为什么不呢?
    • 你怎么能从事可以做出有用的事情extends Throwable

拟议方案#1

真的想做这样的事情的场景具有以下属性:

  • "事件" 最终发生.这是预料之中的.它绝对不是一个Error,而且它什么也没Exception发生.
    • 因为它是预期的,所以会有一个catch等待它.它不会"滑倒"过去.它不会"逃避"任何catch一般Exception和/或任何尝试Error.
  • "事件" 极少发生.
  • 当它发生时,通常会有一个深层堆栈跟踪.

所以也许我现在很清楚我想说的FlyingPig是:这是一个详尽的递归搜索的结果.

要搜索的对象存在:它只是在大海中找到它的问题,即搜索空间.搜索过程很长,因此相对昂贵的异常处理成本可以忽略不计.事实上,传统的控制流构造使用boolean isFound标志的替代方案可能更昂贵,因为必须在整个搜索过程中连续检查,最有可能在递归的每个级别.此检查将在99.99%的时间内失败,但绝对有必要传播终止条件.在某种程度上,虽然有效,但检查效率低下!

通过简单的 …

java exception-handling throwable

28
推荐指数
3
解决办法
1万
查看次数

自定义异常类 - 从Exception或Thowable扩展?

我正在为我的应用程序设计一个自定义的Exception类.我有一个非常基本的问题.我应该从Exception类还是Thowable类扩展?有什么好处?

我打算从底层层中抛出它并在顶层类中捕获它.它会影响我使用Thowable over Exception的决定吗?抓住Thowable是否从根本上说是正确的?

我在这个论坛中经历过其他一些话题.他们谈论在抛出堆栈跟踪时保持堆栈跟踪而没有异常等等.我理解有人说(这里)Thowable是Exception的超级类,我们不应该使用它.但是其他人(这里)说Exception是针对"例外"的案例.

这个问题相当于讨论一个人如何比其他人更好而不是问如何.

java exception-handling

17
推荐指数
1
解决办法
1万
查看次数

抛出异常可以很好地处理Java反射API中引发的所有异常吗?

我发现Java的反射API是异常冗长的,我经常想要捕获每个特定的异常,但只是抛出异常.这是不好的做法,还是你真的把所有这些例外都抛在了方法签名上?然后,调用该方法的每个方法都必须以某种方式处理每个特定的异常.相反,我正在考虑这样做:

public void someMethod()
        throws Exception {

    try {

        // do a bunch of reflection...

    } catch(ClassCastException classCastException) {

        throw new Exception("Some specific message.", classCastException);

    } catch(InvocationTargetException invocationTargetException) {

        throw new Exception("Some specific message.", invocationTargetException);

    }
}
Run Code Online (Sandbox Code Playgroud)

这种做法很糟糕吗?

java reflection exception-handling

2
推荐指数
2
解决办法
1253
查看次数

Universal Catch声明

我想知道是否有办法编写一个catch语句,只要在程序中抛出任何异常就会激活它.谢谢!

java error-handling exception

2
推荐指数
1
解决办法
1278
查看次数