通过反射机制获取class中的构造方法
Vip业务类:
package com.javaSe.bean; public class Vip { int no; String name; String birth; boolean sex; public Vip() { } public Vip(int no, String name) { this.no = no; this.name = name; } public Vip(int no, String name, String birth) { this.no = no; this.name = name; this.birth = birth; } public Vip(int no, String name, String birth, boolean sex) { this.no = no; this.name = name; this.birth = birth; this.sex = sex; } @Override public String toString() { return "Vip{" + "no=" + no + ", name='" + name + '\'' + ", birth='" + birth + '\'' + ", sex=" + sex + '}'; } }
反编译一个类的Constructor构造方法:
package com.javaSe.reflect; import java.lang.reflect.Constructor; import java.lang.reflect.Modifier; /* 反编译一个类的Constructor构造方法。 */ public class ReflectTest11{ public static void main(String[] args) throws Exception{ StringBuilder s = new StringBuilder(); Class vipClass = Class.forName("com.javaSe.bean.Vip"); s.append(Modifier.toString(vipClass.getModifiers()) + " class "+ vipClass.getSimpleName() +" {\n"); // 拼接构造方法 Constructor[] constructors = vipClass.getDeclaredConstructors(); for (Constructor constructor : constructors){ s.append("\t"); s.append(Modifier.toString(constructor.getModifiers())); s.append(" "); s.append(vipClass.getSimpleName()); s.append("("); // 拼接参数 Class[] paramaters = constructor.getParameterTypes(); for (Class paramate : paramaters){ s.append(paramate.getSimpleName()); s.append(","); } // 删除最后下标位置上的字符 if (paramaters.length > 0){ s.deleteCharAt(s.length() - 1); } s.append("){}\n"); } s.append("}"); System.out.println(s); } }
通过反射机制调用构造方法实例化java对象案例:
package com.javaSe.reflect; import com.javaSe.bean.Vip; import java.lang.reflect.Constructor; /* 比上一个例子(ReflectTest11)重要一些!!! 通过反射机制调用构造方法实例化java对象。(这个不是重点) */ public class ReflectTest12 { public static void main(String[] args) throws Exception{ // 不使用反射机制怎么创建对象 Vip vip = new Vip(); Vip vip1 = new Vip(110,"zhangsan","2001-10-11",true); // 使用反射机制怎么创建对象呢? Class c = Class.forName("com.javaSe.bean.Vip"); // 调用无参数构造方法 Object obj = c.newInstance(); // 调用无参数的构造方法怎么办? // 第一步:先获取到这个有参数的构造方法 Constructor con = c.getDeclaredConstructor(int.class,String.class,String.class,boolean.class); // 第二步:调用构造方法new对象 Object object = con.newInstance(110,"jack","1990-01-11",true); System.out.println(object); // 获取无参数构造方法 Constructor cons = c.getDeclaredConstructor(); Object obj2 = cons.newInstance(); System.out.println(obj2); } }