顿搜
飞过闲红千叶,夕岸在哪
类目归类
反射是Java被视为动态或者准动态语言的一个关键性质。目前主流的框架如SSH,Spring MVC都是利用Java的反射机制来实现的。
反射机制是指程序在运行时能够获取任何类的内部所有信息。只要给出类的全名,即可通过反射获取类的所有信息;反射可以在程序运行时获取任意一个对象所属的类对象;在运行时可以获取到类中所有属性对象(包括私有属性),并对其进行操作;
在运行时可以获取到类中,父类中所有的方法,并且可以调用他们;
Class其实就是类的类型。
1、Class类常用方法
getName() //获得类的完整名称
getDeclaredFields()//获得类中的所有属性
getDeclaredMethods() //获得类中所有的方法
getConstructors()//获得类的构造方法
newInstance()//实例化类(利用的是类的无参构造方法)2、获得类对象的方式
//1、通过类的完整路径和名称获得类对象
Class className = Class.forName("java.lang.String");
//2、通过类的实例化对象名称来获得类对象
String str = new String("This is a test");
Object o = srt;
Class className = o.getClass(); //Class className = str.getClass();
//3、通过类名获得类对象
Class className = String.getClass();
//4、通过类装载器获得类对象
ClassLoader loder = Thread.currentThread().getContextClassLoder();
Class clazz = loder.loadeClass("java.lang.String");3、通过类对象实例化一个对象
Stromg str = (String) className.newInstance();Field类是用于表示类和接口中的属性对象的类,可以操作类中全部的私有和公有属性。
1、常用方法
getName()//获取属性名称
getType()//获取属性类型
setAccessible(true)//开启控制权限
get(Object o)//获得对象o中这个属性的值,但如果该属性是私有的,就需要开启访问权限
set(Object o , Object value)//向对象o中的这个属性赋值2、获取类中的属性
Field[] fi = className.getDeclaredFields();//可以得到所有属性,包括公有和私有
Field[] fi = className.getFields();//只能得到公有属性Method类是用于表示类和接口中的方法对象的类,可以操作类中全部的私有和公有方法。
1、常用方法
getName()//获得方法名称
getReturnType()//获得方法返回值类型
invoke(Object o,Object args);//利用o对象调用该方法
getParameterTypes();//获得方法所有参数值类型,按照顺序返回Class数组
getDeclaredAnnotations();//获取方法的全部注释2、利用类对象获得某方法
Method me = className.getMethod("setName", String.class);//得到setName方法,参数为String类型
Class[] cla = {String.class,int.calss};
Method me = className.getMethod("setStri",cla);//得到setStri方法,参数有多个,在cla中3、使用 invoke()方法
me.invoke(o,new Object[0]);//表示调用o对象的me方法,没有参数
me.invoke(o,"张三");//表示调用了o对象的me方法,参数为字符串类型
Object oArgs = {"张三",22};
me.invoke(o,oArgs);//表示调用了o对象的me方法,参数有多个,放在oArgs中