new 的对象要求在编译期进行类路径的检查。而 Class.forName() 则可以在运行时动态获取。
    并且反射可以绕过 JVM 的检查,去操作对象的熟悉和方法

    1. Class clazz = Class.forName("cn.demojie.ReflectionTest");
    2. Class.forName(String className);
    3. // 可以指定 ClassLoader,以及是否实例化
    4. Class.forName(String name, boolean initialize, ClassLoader loader);
    5. // 自定义类加载器,实现从任意字节流进行类加载
    6. ClassLoader.loadClass()/findClass()

    基础数据类型的 Class 对象,是包装类型的:

    // GETSTATIC java/lang/Integer.TYPE : Ljava/lang/Class;
    // INVOKEVIRTUAL java/lang/Class.newInstance ()Ljava/lang/Object;
    int.class.newInstance();
    
    // Void.TYPE
    Class clazz = void.class;