我不小心声明了一个抛出异常的方法,(IllegalArgumentException
(,但我忘了使用throws
。
我认为这是强制性的,我想知道为什么代码在没有任何警告/错误的情况下编译。
如果它不是强制性的,那么它的目的是什么?
不能引发throws
子句不允许的已检查异常。 但是,IllegalArgumentException
是运行时异常,您不必声明它吗?
Java 中有两种 (四( 种Throwable
。
- 纯
Exception
s(和子类(:您需要捕获它们或在消息签名处声明抛出 RuntimeException
s(和子类(:顾名思义,发生这种情况是因为运行时出现故障(例如,对 null 的方法调用(。这些可以声明,但不必声明(如果你这样做,一些静态代码分析工具会抱怨(。他们可以而且应该在某个地方被抓住。Error
s(和子类(:这些事情超出了当前代码的范围(例如OutOfMemoryError
(。这些不应该被抓住,因为你对它们无能为力......- 正如@kaya
Throwable
自己所说:既不应该被扔,也不应该被抓住。