反射:顾名思义,将什么反射成什么,在java中,反射机制,就是将类,类中的各种成员反射成对象,说直白点就是剖解类。反射主要应用在,很多主流框架都使用了反射技术.像ssh框架都采用两种技术 xml做配置文件+反射技术.
如何去了解反射:
认识反射前先去认识这几个类
Class :他是一个java类,他是java所有对象的的字节码类
Constructor:构造方法,可以通过他获取到获取到类的所有构造函数,有了构造函数当然就有了对象。
Method:方法:反射出方法成员的对象
Field 字段:反射出字段成员的对象
根据JDKAPI自然就会写代码:
public class ReflectTest { public static void main(String[] args) throws Exception { //三种方式获取反射类 Class clazzTest=Class.forName("com.zxj.test.Test01"); Class clazzTest01 = Test01.class; Class classTest02 = new Test01().getClass(); //两种反射方式获取对象 Test01 testInstance = (Test01) clazzTest.newInstance(); Constructor testConstructors=clazzTest.getConstructor(null); Test01 ConstructorsInstance =(Test01) testConstructors.newInstance(null); //反射获取私有对象 Class clazzTest02=Class.forName("com.zxj.test.Test02"); Constructor contru = clazzTest02.getDeclaredConstructor(null); contru.setAccessible(true);//暴力反射 Test02 test02 =(Test02) contru.newInstance(null); //反射获取方法 //反射出公共的方法 Method clazz01Method = clazzTest.getMethod("sexJ", null); clazz01Method.invoke(testInstance,null); //反射私有方法 Method class01Private = clazzTest.getDeclaredMethod("getName", null); class01Private.setAccessible(true); class01Private.invoke(testInstance, null); //反射静态main方法 Method clazzStatic = clazzTest.getMethod("main", String[].class); //为了兼容jdk1.4,在jdk1.4数组代表多个元素,二在jdk1.5后则是数组就是单个元素 clazzStatic.invoke(null, new Object[]{new String[]{"sf","adfs"}}); //反射字段 Field sexFiled = clazzTest.getField("sex"); sexFiled.getName(); //反射私有字段 Field sexPrivateFiled = clazzTest.getDeclaredField("name"); sexPrivateFiled.setAccessible(true); sexPrivateFiled.getName(); //操作字段的方法 sexPrivateFiled.set(testInstance, "sfsdf"); System.out.println(sexPrivateFiled.get(testInstance)); } }