Any class can be loaded by Class.forName(). To create an instance of the class using the Class.newInstance() method, the class needs to have a no-argument (default) constructor. But the classes in the java.lang.reflect package allow you to create objects of classes without default constructors, too -- it just takes a little more work.
There are access control issues too, of course; you can't use Class.newInstance() to create an instance of a class whose default constructor isn't accessible. Again, you may be able to use the "reflect" package to do so anyway.