...
This noncompliant code example throws undeclared checked exceptions. The undeclaredThrow()
method takes a Throwable
argument and invokes a function that will throw the argument without declaring it. Although undeclaredThrow()
catches any exceptions the function declares that it might throw, it nevertheless throws the argument it is given without regard to whether the argument is one of the declared exceptions. This noncompliant code example also violates ERR07-J. Do not throw RuntimeException, Exception, or Throwable. However, because of exception ERR08-EX1J-EX0, it does not violate ERR08-J. Do not catch NullPointerException or any of its ancestors.
Any checked exception thrown by the default constructor of java.lang.Class.newInstance()
is propagated to the caller even though Class.newInstance()
declares that it throws only InstantiationException
and IllegalAccessException
. This noncompliant code example demonstrates one way to use Class.newInstance()
to throw arbitrary checked and unchecked exceptions:
...
According to the Java API [API 20062014], class Thread
:
[
Thread.stop()
] may This method was originally designed to force a thread to stop and throw a givenThrowable
as an exception. It was inherently unsafe (seeThread.stop()
for details), and furthermore could be used to generate exceptions that its the target thread is unprepared to handle (including checked exceptions that the thread could not possibly throw, were it not for this method). was not prepared to handle.
For example, the following method is behaviorally identical to Java's throw operation
...
but circumvents the compiler's attempts to guarantee that the calling method has declared all of the checked exceptions that it may throw.
Code Block | ||
---|---|---|
| ||
static void sneakyThrow(Throwable t) { Thread.currentThread().stop(t); } |
Note that the Thread.stop()
methods are deprecated, so this code also violates MET02-J. Do not use deprecated or obsolete classes or methods.
...
It is also possible to disassemble a class, remove any declared checked exceptions, and reassemble the class so that checked exceptions are thrown at runtime when the class is used [Roubtsov 2003]. Compiling against a class that declares the checked exception and supplying at runtime a class that lacks the declaration can also result in undeclared checked exceptions. Undeclared checked exceptions can also be produced through crafted use of the sun.corba.Bridge
class. All of these practices are violations of this rule.
...
Bibliography
[API 2014] | Thread.stop(Throwable) |
Item 2, "Consider a Builder When Faced with Many Constructor Parameters" | |
| |
[JLS 2015] | |
| |
| |
"Scalability of Checked Exceptions" |
...