标签:
下面我会通过代码形式进行讲解:
1 package cn.itcast_02; 2 3 import java.lang.reflect.Constructor; 4 5 import cn.itcast_01.Person; 6 7 /* 8 * 通过反射获取构造方法并使用。 9 */ 10 public class ReflectDemo { 11 public static void main(String[] args) throws Exception { 12 // 获取字节码文件对象 13 Class c = Class.forName("cn.itcast_01.Person");//这里红色字体的是配置文件,将来我们只要改一下配置文件,就加载另一个类构造,方便 14 15 // 获取构造方法 16 // public Constructor[] getConstructors():所有公共构造方法 17 // public Constructor[] getDeclaredConstructors():所有构造方法 18 // Constructor[] cons = c.getDeclaredConstructors(); 19 // for (Constructor con : cons) { 20 // System.out.println(con); 21 // } 22 23 // 获取单个构造方法 24 // public Constructor<T> getConstructor(Class<?>... parameterTypes) 25 // 参数表示的是:你要获取的构造方法的构造参数个数及数据类型的class字节码文件对象 26 Constructor con = c.getConstructor();// 返回的是构造方法对象 27 28 // Person p = new Person(); 29 // System.out.println(p); 30 // public T newInstance(Object... initargs) 31 // 使用此 Constructor 对象表示的构造方法来创建该构造方法的声明类的新实例,并用指定的初始化参数初始化该实例。 32 Object obj = con.newInstance(); 33 System.out.println(obj); 34 35 // Person p = (Person)obj; 36 // p.show(); 37 } 38 }
(1)使用public Constructor[] getConstructors(),然后利用增强for循环进行遍历,然后得知如下结果:我们发现只能遍历公共构造方法。
(2)使用public Constructor[] getDeclaredConstructors():然后利用增强for循环进行遍历,然后得知如下结果:我们发现可以遍历所有构造方法。
(3)使用public Constructor[] getDeclaredConstructors():我们在原来的Person类中添加一个private构造,然后利用增强for循环进行遍历,然后得知如下结果:我们发现可以遍历所有构造方法。包括刚刚我们定义的private的构造,是不是感觉很牛逼!!!
Android(java)学习笔记107:通过反射获得构造方法并且使用
标签:
原文地址:http://www.cnblogs.com/hebao0514/p/4565482.html