//得到方法的形参类型 Class[] parameterTypes = declaredConstructor[i].getParameterTypes();
1.什么是反射
反射是java语言的一个特性,它允程序在运行时(注意不是编译的时候)来进行自我检查并且对内部的成员进行 *** 作。例如它允许一个java的类获取他所有的成员变量和方法并且显示出来。Java 的这一能力在实际应用中也许用得不是很多,但是在其它的程序设计语言中根本就不存在这一特性。例如,Pascal、C 或者 C++ 中就没有办法在程序中获得函数定义相关的信息。
2.常用的方法
//通过类名得到具体的类实例 Class> reflectionTest = Class.forName("ReflectionTest");
Constructor[] declaredConstructor; //得到所有的声明的构造方法 declaredConstructor = reflectionTest.getDeclaredConstructors();Class[] c = {int.class}; try { //获取指定参数的构造函数 Constructor> declaredConstructor = reflectionTest.getDeclaredConstructor(c); //调用指定的构造方法 // 调用私有的构造方法需调用 declaredConstructor.setAccessible(true); 否则会报错 //调用构造方法 declaredConstructor.newInstance(20); //获取指定的方法 第一个参数为方法名,第二个参数是方法的的形参类型 Method setAge = reflectionTest.getDeclaredMethod("setAge", c); setAge.setAccessible(true); //调用成员方法 setAge.invoke(reflectionTest,25); //获取所有的成员变量 reflectionTest.getDeclaredFields(); //获取指定的成员变量 Field age = reflectionTest.getDeclaredField("age"); //获取指定的成员变量的值 String s = age.get(reflectionTest1).toString(); System.out.println(s+"age.get(reflectionTest1).toString()"); //设置指定的成员变量的值 第一个参数是对象 第二个参数是值 age.set(reflectionTest1,30); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); }
//得到方法的权限修饰符 String modifier = Modifier.toString(declaredConstructor.getModifiers());
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)