Java相当于python引发了异常("出了问题")

时间:2018-04-08 18:54:02

标签: java

在不考虑应该使用哪些更具体的异常的情况下,在Java中引发泛型异常的最佳方法是什么?我在考虑(但不知道这是否最好):

throw new RuntimeException("Something went wrong");

4 个答案:

答案 0 :(得分:1)

它取决于它是什么类型的异常。在Java中 - 我应该补充一点,这是最受批评的Java之一 - 有检查和未检查的异常:

  • 如果资源或操作出现问题,则会抛出已检查的异常(从java.lang.Excetption派生而不是从java.lang.RuntimeException派生的任何内容),这可能会或多或少地出现:找不到文件,网络链接等等,
  • 未经检查的异常(来自java.lang.RuntimeException的任何内容)主要是由语言或库引发的,因为您的代码中存在错误而被抛出

同样,很容易就这个问题进行激烈的争论,这超出了你的问题的范围。 C#背后的人看着Java并且想:"我不会在那个"并完全摆脱了经过检查的例外情况。

但这是Java,所以我们有两种例外。因此,如果您希望按照Java的设计方式执行操作,则应根据出错的类型抛出已检查或未经检查的异常。

说了这么多,有一个明显的趋势,即程序员越来越多地使用未经检查的异常,主要是因为已检查的异常是你知道什么的痛苦,并且因为有意义的异常处理在实际中并不那么明确在设计语言时的生活。

答案 1 :(得分:0)

是的,你是对的,这可能是世界:

throw new RuntimeException("error message");

您还可以执行稍微更具体的异常

throw new IllegalArgumentException("error message");
throw new IllegalStateException("error message");
throw new UnsupportedOperationException("error message");

答案 2 :(得分:0)

抛出新的RuntimeException(“message”); //您不必在方法签名中声明这一点。

void doSomething1() {
   throw new RuntimeException("");
}

抛出新的异常(“消息”); //你必须在方法签名中声明这个;像:

void doSomething2() throws Exception{
   throw new Exception("");
}

答案 3 :(得分:0)

Java中存在不同类型的异常,例如ThrowableErrorExceptionRuntimeException。根据SonarQube(squid : S1181),Throwable是Java中所有错误和异常的超类。 Error是所有错误的超类,不应由应用程序捕获。因此,您应该使用已检查的异常Exception或未经检查的异常(也称为运行时异常)RuntimeException

  

在不考虑应该使用哪些更具体的异常的情况下,在Java中引发泛型异常的最佳方法是什么?

正如您所说,您可以抛出运行时异常。我个人更喜欢更有意义的异常类型,但这取决于你。有关the most commonly used exceptions in Java的讨论,例如:

  • IllegalStateException
  • IllegalArgumentException

另请参阅:Java Language Specification, §11. Exceptions