反射机制——获取Class中的构造函数
2018-01-23 00:00
267 查看
一、通过反射实例化无参对象
/*** * * @Title: createNewObject * @Description: 反射实例化无参对象 * @param * @throws * Exception * @return void * @throws */ public static void createNewObject() throws Exception { // 早期: // new 的时候,先根据被new的类的名称寻找该类的字节码文件,加载至内存, // 并创建该字节码文件对象,然后创建该字节码文件对应的Person对象。 // com.lh.reflection.bean.Person p = new // com.lh.reflection.bean.Person(); // 现在: String name = "com.lh.reflection.bean.Person"; // 寻找该类名称字节码文件 ,并加载至内存,生成Class对象 Class<Person> clazz = (Class<Person>) Class.forName(name); // 如何产生该类的对象呢? // 相当于调用Person类中的无参构造方法 Person person = clazz.newInstance(); }
二、通过反射实例化有参对象
/** * @throws Exception * * @Title: createNewObject2 * @Description: * 反射实例化有参对象 * @param * @return void * @throws */ private static void createNewObject2() throws Exception { // com.lh.reflection.bean.Person p = new com.lh.reflection.bean.Person("小明", 20); /*** * 当获取指定名称对应类中所体现的对象时,而该对象初始化不使用空参构造函数怎么办呢? * 既然是通过指定的构造函数进行对象的初始化,所以应该先获取该构造函数,通过字节码文件对象即可完成。 * 该方法是getConstructor(Class<T>.. paramsType) * */ String name = "com.lh.reflection.bean.Person"; // 寻找该类名称字节码文件 ,并加载至内存,生成Class对象 Class<Person> clazz = (Class<Person>) Class.forName(name); // 获取指定的构造器对象 Constructor<Person> constructor = clazz.getConstructor(String.class, int.class); // 通过构造器Constructor类中的newInstance()方法进行初始化 Person person = constructor.newInstance("小明", 20); }
三、Person类
/** * @Title: Person.java * @Package com.lh.reflection.bean * @Description: TODO * @author Liu * @date 2018年1月23日 下午3:06:10 * @version V1.0 */ package com.lh.reflection.bean; /** * @ClassName: Person * @Description: Person实体类 * @author Liu * @date 2018年1月23日 下午3:06:10 * */ public class Person { private int age; private String name; public Person() { System.out.println("constructor no param run..."); } public Person(String name,int age) { this.age = age; this.name = name; System.out.println("constructor with param run..." + this.name + ":" + this.age); } public void show() { System.out.println(name + "...show run..." + age); } private void method() { System.out.println("method run"); } public void paramMethod(String str, int num) { System.out.println("paramMethod run..." + str + ":" + num); } public static void staticMethod() { System.out.println("static method run..."); } }
四、关键点
1、无参实例化只需要调用class对象的newInstance()方法即可。2、有参实例化需要先通过getConstructor(Class<T>.. paramTypes)获取指定Constructor构造器对象,然后调用newInstance(Object.. objs)方法即可。
相关文章推荐
- Java 反射机制 获取Class中的构造函数
- 28-反射机制-04-反射机制(获取Class中的构造函数)
- Java通过反射机制获取Class对象
- 反射机制:获取class的方法
- Java 反射机制获取Class中的方法 和字段
- 反射机制获取Class对象的三种方式:
- java 反射机制 之 getConstructor获取有参数构造函数 然后newInstance执行有参数的构造函数
- 28-反射机制-03-反射机制(获取Class对象的三种方式)
- 反射机制_介绍_Class对象获取_动态操作_构造器_方法_属性JAVA211-212
- 28-反射机制-05-反射机制(获取Class中的字段)
- 28-反射机制-06-反射机制(获取Class中的方法)
- 黑马程序员——通过反射Proxy类的静态函数getProxyClass()来获取动态生成类的构造函数和方法
- java反射学习笔记(3)---使用Class来获取方法、成员变量、构造函数信息
- 反射机制--获取Class中的字段
- 反射机制——获取Class中的字段
- 反射机制获取Class对象的三种方式
- java 反射机制 之 Class.forName() 获取class的对象
- (104)反射:获取Class的对象、构造函数、字段、方法。反射实例练习
- Android : 反射机制获取或设置系统属性(SystemProperties)
- JAVA高新技术反射机制的原理之构造函数、普通方法和字段