1、类型模板 Class:
物以类聚:
我们可以用class Person{ } class Animal{ }来描述一类人或一类动物;
那么再想一下,我们是不是可以用class Class{ } 来抽象描述类呢?
答案时可以的,这就是jdk中的 Class 类(类型模板),
Class类也可以简单的理解为描述类的类;
我们得到一个类的类型模板就像得到了一个人的DNA,
DNA中包含的一个人的所有外部形态特征,
某个类的Class类型模板中也就包含的该类的所有特征(如类名、包名、方法……等) 。
所以我们 只要得到了一个类的类型模板,就能将一个类剖析的很清楚。
2、获取Class类型模板对象的方法:
(1):通过对象调用getClass()方法创建。
(2):利用Class类中的forName()方法来创建。
(3):利用类型名(类名)来创建。
3、通过反射方法动态来获取类中的方法以及构造函数(五步)。
(1).先获取类型模板对象,
《1》Student stu=new Student();
Class c=stu.getClass();
《2》Class c=Class.forName("类全名");
《3》Class c=Student.class;
(2).通过类型模板对象来获取构造函数
《1》获取无参(默认构造)
Class[] arr={};//构造方法的参数 类型、顺序、个数,此处为无参构造。
Constructor con=c.getDeclaredConstructor(arr);
《2》获取有参构造
Class[] arr={String.class,int.class,Integer.class};// 构造方法的参数 类型、顺序、个数。
Constructor con=c.getDeclaredConstructor(arr);
(3).调用构造方法创建对象
《1》利用无参构造创建对象
Object[] arr1={};//构造方法的参数值,此处无参
Object obj=con.newInstance(arr1);//利用得到的构造方法创建实例对象
《2》利用有参构造创建对象
Object[] arr1={"yuyihua",21,89};//构造方法的参数值。
Object obj=con.newInstance(arr1);//利用得到的构造方法创建实例对象
(4).获取方法
Method m=c.getMethod("show",arr);//show为方法名,arr为方法参数表,同(2)《1》
Method m=c.getMethod("show",arr);//show为方法名,arr为方法参数表,同(2)《2》
(5).通过 invoke method 调用方法
m.invoke(obj, arr1);//obj为利用反射得到的对象,arr1为传入方法参数值,同(3)《1》
m.invoke(obj, arr1);//obj为利用反射得到的对象,arr1为传入方法参数值,同(3)《2》
(1)--(3) 相当于 Student stu=new Student();
或 Student stu=new Student(={"yuyihua",21,89);
(4)--(5) 相当于 stu.show(); 或 stu.show("yuyihua",21,89);
4、实例代码