Android(java)学习笔记107:通过反射获得构造方法并且使用

下面我会通过代码形式进行讲解:

 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的构造,是不是感觉很牛逼!!!

技术分享

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。