import java.lang.reflect.Constructor; /** * 通过三种方式的反射创建对象 */ public class Demo19 { public static void main(String[] args) throws Exception { //不使用反射建立对象 Person person = new Person(); System.out.println(person); //方式一(通过建立对象) Class clazz1 = person.getClass(); Constructor constructor1 = clazz1.getConstructor(); Person person1 = (Person) constructor1.newInstance(); System.out.println(person1); //方式二(通过所在路径--相对路径)(建议使用) Class clazz2 = Class.forName("com.niuzong.demo.Person"); Constructor constructor2 = clazz2.getConstructor(); Person person2 = (Person) constructor2.newInstance(); System.out.println(person2); //方式三(通过类名) Class clazz3 = Person.class; Constructor constructor3 = clazz3.getConstructor(); Person person3 = (Person) constructor3.newInstance(); System.out.println(person3); }
}
JVM类加载流程和内存结构
普通情况生成对象:
Person person = new Person();
生成对象步骤:
1.编译器加载Person.class文件.
2.查找构造函数Person().
3.通过构造函数Person()创建对象.
使用反射生成对象:
Class clazz2 = Class.forName("com.niuzong.demo.Person"); Constructor constructor2 = clazz2.getConstructor(); Person person2 = (Person) constructor2.newInstance();
生成对象步骤:
1.运行期加载Person.class文件.
2.创建构造函数Person().
3.通过狗仔函数Person()创建对象.
原文:https://www.cnblogs.com/zhujianqiang/p/14744548.html