Java 我们可以在抛出中使用泛型异常吗?

Java 我们可以在抛出中使用泛型异常吗?,java,exception,throws,Java,Exception,Throws,我有一个愚蠢的怀疑。在使用抛出时我知道我们指定了多个异常。我的问题是,我们是否可以包括异常(通用)以及其他特定异常?这是正确的编码方法吗 public String display() throws IOException, FileNotFoundException, Exception { ... } 这里使用例外是正确的方法???它是法律规范 这是个坏主意 这是一个坏主意的原因是调用方现在必须处理(或传播)异常。但是异常几乎可以是任何东西。如果您不知道异常处理程序中的异常可能是什

我有一个愚蠢的怀疑。在使用
抛出时
我知道我们指定了多个异常。我的问题是,我们是否可以包括
异常
(通用)以及其他特定异常?这是正确的编码方法吗

public String display() throws IOException, FileNotFoundException, Exception {
    ...
}
这里使用
例外
是正确的方法???

它是法律规范

这是个坏主意

这是一个坏主意的原因是调用方现在必须处理(或传播)
异常。但是
异常
几乎可以是任何东西。如果您不知道异常处理程序中的异常可能是什么,那么如何处理异常

我认为,如果您不知道异常的原因是什么,那么唯一完全安全的方法就是记录异常并终止应用程序。在某些情况下,您可以尝试记录异常,“失败”请求并继续下一个请求。如果服务可用性是最高优先级,并且系统设计为健壮的(例如幂等请求、事务实现),那么这可能是一个明智的策略。然而,这种方法有可能增加损害。但是抛出异常的问题在于,您很难区分可恢复的错误和不可恢复的错误。

这是法律代码

这是个坏主意

这是一个坏主意的原因是调用方现在必须处理(或传播)
异常。但是
异常
几乎可以是任何东西。如果您不知道异常处理程序中的异常可能是什么,那么如何处理异常


我认为,如果您不知道异常的原因是什么,那么唯一完全安全的方法就是记录异常并终止应用程序。在某些情况下,您可以尝试记录异常,“失败”请求并继续下一个请求。如果服务可用性是最高优先级,并且系统设计为健壮的(例如幂等请求、事务实现),那么这可能是一个明智的策略。然而,这种方法有可能增加损害。但是抛出异常的问题在于,您更难区分可恢复的错误和不可恢复的错误。

在我看来,当您的业务逻辑和管道工作时,该方法可以抛出通用异常,即使在致命错误之后,应用程序也必须继续工作,将此错误记录为FFDC并继续工作。若您的应用程序必须在致命的eror之后关闭,那个么您的方法不必抛出泛型异常

在我看来,方法可以抛出泛型异常,当您的业务逻辑和管道工作时,就像应用程序必须继续工作一样,即使在发生致命错误后,也要将此错误记录为FFDC并继续工作。若您的应用程序必须在致命的eror之后关闭,那个么您的方法不必抛出泛型异常

这是合法的Java代码

声明中使用
异常
的第一部分抛出
声明

在它表明该方法可以抛出任何已检查的异常之前,应该很少在生产代码中编写它,这是非常罕见的

但它目前用于Junit测试。测试函数的目的是测试单个功能,并且应该尽可能简单,因为它不包含逻辑错误。因此,通常将测试编写为:

@Test
public void testFeature() throws Exception {
    //actual test that can call any function declaring checked exception
}
在这里,这只是意味着您不想担心在测试体中使用的函数中声明的可能异常


但是,除了其他异常(子)类之外,您的代码还声明了异常。这是无用的,因为所有异常类都是
exception
的子类,因此
IOException
FileNotFoundException
都是
exception
s

因此,即使是合法的,这也没有意义:如果您在
throws
声明中放入
Exception
,您应该删除所有其他异常类,因为它们已经包含在
Exception
声明中。

这是合法的Java代码

声明中使用
异常
的第一部分抛出
声明

在它表明该方法可以抛出任何已检查的异常之前,应该很少在生产代码中编写它,这是非常罕见的

但它目前用于Junit测试。测试函数的目的是测试单个功能,并且应该尽可能简单,因为它不包含逻辑错误。因此,通常将测试编写为:

@Test
public void testFeature() throws Exception {
    //actual test that can call any function declaring checked exception
}
在这里,这只是意味着您不想担心在测试体中使用的函数中声明的可能异常


但是,除了其他异常(子)类之外,您的代码还声明了异常。这是无用的,因为所有异常类都是
exception
的子类,因此
IOException
FileNotFoundException
都是
exception
s


因此,即使是合法的,这也没有意义:如果您在
抛出
声明中放入
异常
,您应该删除所有其他异常类,因为它们已经包含在
异常
声明中。

如果代码中没有发生异常,那么为什么
抛出该异常。1。如果声明方法抛出选中的异常(扩展了
exception
而不是
RuntimeException
),则强制调用方处理它。他们需要编写try-catch,即使他们可能不需要,我想说这有点傻(我真的不想讨论检查异常是否坏)。2.如果您强制调用方处理它,但这是最常见的异常-您希望它们处理什么?我真的希望调用方处理任何方法