1. 使用反射创建类实例的三种方式
- 对象.getClass()
- 类.class
- Class.forName(类的全限定名)
public static void main(String[] args) {
Person person = new Solution().new Person();
Class<? extends Person> class1 = person.getClass();
System.out.println(class1);
Class<Person> class2 = Person.class;
System.out.println(class2);
try {
Class<?> class3 = Class.forName("test.Solution$Person");
System.out.println(class3);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
运行结果:
2. Class.forName()和 ClassLoader区别
-
Class.forName()除了将类的.class文件加载到jvm中之外,还会对类进行解释,执行类中的static块。
-
ClassLoader只干一件事情,就是将*.class文件加载到jvm中,不会执行static块中的内容,只有在newInstance才会去执行static块。