1.
Class clazz = Class.forName("java.lang.String");
Object obj = clazz.newInstance();
String str = (String)obj;
Reason for downcasting:
It is because of the java compiler. In compilation phase the compiler cannot know about the real object type when you call newInstance() method.The argument to Clas.forName() could be anything, even an invalid class name.
2.
Drawbcak of Reflection: lack of compile time error checking, maybe the loss of performance
3.
Class.newInstance()
IllegalAccessException: constructor is prviate or otherwise unavailable.
ExceptionInInitializationError: initialization error
SecurityException: security policy
4.
Classloader
Factory Method
Java disallows calling a getClass() method in its constructor since a object may not be formed fully and initialized yet.
5.
Java name space
<c, p, cl>