Thrown when an application tries to load in a class,
but the currently executing method does not have access to the
definition of the specified class, because the class is not public
and in another package.

Thrown when an application tries to create an instance of a class
using the newInstance method in class
Class, but the specified class object cannot be
instantiated because it is an interface or is an abstract class.

Thrown if the Java Virtual Machine tries to load in the
definition of a class (as part of a normal method call or
as part of creating a new instance using the new
expression) and no definition of the class could be found.