<p><a href="https://stackoverflow.com/users/9931/ryan-delucchi">Ryan Delucchi</a> asked <a href="https://stackoverflow.com/questions/194698/how-to-load-a-jar-file-at-runtime#194712">here</a> in comment #3 to <a href="https://stackoverflow.com/users/4725/tom-hawtin-tackline">Tom Hawtin</a>'s answer:</p>

<blockquote>
  <p>why is Class.newInstance() "evil"?</p>
</blockquote>

<p>this in response to the code sample:</p>

<pre><code>// Avoid Class.newInstance, for it is evil.
Constructor&lt;? extends Runnable&gt; ctor = runClass.getConstructor();
Runnable doRun = ctor.newInstance();
</code></pre>

<p>so, why is it Evil?</p>

The Java API documentation explains why (
http://java.sun.com/javase/6/docs/api/java/lang/Class.html#newInstance()
):
Note that this method propagates any exception thrown by the nullary constructor, including a checked exception. Use of this method effectively bypasses the compile-time exception checking that would otherwise be performed by the compiler. The
```
Constructor.newInstance
```
method avoids this problem by wrapping any exception thrown by the constructor in a (checked)
```
InvocationTargetException
```
.
In other words, it can defeat the checked exceptions system.