反射???
一、反射的概述
java的反射指的是在程序运行时解析类的的内部信息,对于任意一个类,
都能够知道其属性以及方法,而对于任意一个对象,也能调用它的方法及属性,
这种可以动态获取信息的方法就称之为java的反射机制。
二、反射中获取类信息的三种方法
先写一个ToolKit类
1)Class c = ToolKit.class; //通过已知类名获取类型信息
2)ToolKit tl = new ToolKit();
Class c = tl.getClass(); //通过对象获取类型信息
3)Class c = Class.forName(String classFullPath) //通过全包路径字符串获取信息
注意:这三种获取类信息的方法,第一种需要导入类的包,否则编译错误,依赖性强;
第二种getClass对象有了就不需要反射;
所以一般都用第三种方法,通过路径获取信息。
三、如何调用构造方法
一个类中通常有无参构造和有参构造两种方法
1)通过无参构造
T t = (T)c.newInstance();
2)通过有参构造
Constructor cons = c.getConstructor(Class<?>...parameter Types);
T t = (T)cons.newInstance(Object...parameters);
Class类中的newInstance()方法只能创建默认构造器的对象,
而想要创建有参的构造函数还是要使用Constructor类中的newInstance(Object...initargs)方法.
四、获取类中的自定义属性与方法
通常在调用类中被保护的信息时可以:
xxx.setAccessible(true)(设置属性的可见性)
1)调用自定义属性
<1>Filed[] fs = c.getDeclaredFields(); //获取当前类中的所有属性
int modifiedNum = f.getModifies(); //获取属性访问修饰整数
2:private 0:default 4:protected 1:public
Class c = f.getType(); //获取属性的类型信息
String fieldName = f.getName(); //获取属性的名称
注:给属性赋值的两种方式
f.set(T t , E value)
f.invoke(T t , E value)
给t对象的f属性赋值
2)调用自定义方法
<1>Method[] ms = c.getDeclaredMethods();
String methodName = m.getName(); //获取方法名称
Class c = m.getReturnType(); //获取方法返回类型