Java可以通过哪些方式在没有`throw`语句的情况下引发Exception?

时间:2019-05-22 10:41:06

标签: java exception jvm

我正在尝试查找JVM将抛出Exception而在Java代码中没有throw语句的情况的详尽列表。当然,我们都熟悉NullPointerExceptions,例如:

Object o = null;
o.toString();

整数数学也可以在1/0中引发ArithmeticException,并像在Integer i=null; i++;中那样对空Integer开箱。

对于我眼前的问题,我不关心ErrorStackOverflowError之类的OutOfMemoryError情况,只关心Exception的类型(尽管有错误列表)然后随时指出)。我也很高兴排除从Java调用任意本机代码的情况。谢谢。

另一种思考方式是-如果我看到这样的Stacktrace:

Exception in thread "main" java.lang.SomeException: Some Exception Message
    at com.test.MyClass.main(MyClass.java:6)

然后我打开MyClass.java,第6行 没有throw语句-哪里有规范的异常可能原因列表?再次感谢。

1 个答案:

答案 0 :(得分:4)

没有规范列表。原因如下:

  1. Java维护者未提供一个。大概他们认为这不是值得的练习 1
  2. 任何以本机代码实现的标准库方法 都可以在没有Java throw语句的情况下引发任何异常。尚未记录,并且会因Java版本而异。
  3. 任何第三方库方法都可以引发本机代码中的任何异常。
  4. 您可以通过调用Unsafe.throwException引发任何异常。

以此类推。

请注意,3.和4.意味着有可能通过未在其签名中声明异常的方法抛出检查异常。

简而言之,可以在没有throws语句的情况下抛出任何可能的异常


1-问自己:为什么这些信息会被实用使用?如果没有用,Java团队不会花时间创建和维护这样的列表。请注意,机械生产会很困难。