反射获取类属性和方法的调用

来源:互联网 发布:微时代网络 编辑:程序博客网 时间:2024/05/21 11:10
package io.stream;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.lang.reflect.Modifier;public class ReflectTest {public static void main(String[] args) {// test1();// test2();// test3();// test4();// test5();// test6();test7();}private static void test7() {// 得到并调用指定的方法(带参数)Class<?> cl;try {cl = Class.forName("io.stream.Student");Object obj = cl.newInstance();Class<?>[] paras={String.class,int.class}; Method me=cl.getDeclaredMethod("sayHello", paras);//得到方法Object[] val={"dd",2};//把参数存进数组,参数数组为Object类型Object objval = me.invoke(obj, val);//执行带参数的方法System.out.println(objval);//输出返回值} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}private static void test6() {// 得到并调用指定的方法try {Class<?> cl = Class.forName("io.stream.Student");Object obj = cl.newInstance();Method me = cl.getMethod("sayHi", null);// 得到方法Object objval = me.invoke(obj, null);// 执行方法,普通方法执行用invokeSystem.out.println(objval);// 得到执行方法的返回值} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}private static void test5() {// 得到所有的方法try {Class<?> cl = Class.forName("io.stream.Student");Method[] me = cl.getDeclaredMethods();for (Method m : me) {System.out.println(m.getName() + "\t" + m.getTypeParameters()+ "\t" + m.getReturnType().getName() + "\t"+ Modifier.toString(m.getModifiers()));}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}private static void test4() {// 得到并调用带参的构造方法try {Class<?> cl = Class.forName("io.stream.Student");Constructor<?> c = cl.getDeclaredConstructor(String.class,String.class, int.class);//得到构造方法Object obj = c.newInstance("01", "王安石", 40);//构造方法执行用newInstance方法// System.out.println("ff");} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}private static void test3() {// 得到并调用无参构造方法try {Class<?> cl = Class.forName("io.stream.Student");Constructor<?>[] con = cl.getDeclaredConstructors();System.out.println(con.length);Constructor<?> c = cl.getDeclaredConstructor(null);// 得到无参构造方法Object obj = c.newInstance(null);// 新建一个实例} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}private static void test2() {// TODO Auto-generated method stubClass cl;try {cl = Class.forName("io.stream.Student");Object obj = cl.newInstance();Field f = cl.getDeclaredField("stuName");f.setAccessible(true);//设置私有的可以访问f.set(obj, "李商隐");System.out.println(f.get(obj));} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}private static void test1() {// TODO Auto-generated method stubtry {Class<?> cl = Class.forName("io.stream.Student");// Object obj=cl.getInterfaces();Field[] fl = cl.getDeclaredFields();//得到属性(字段)for (Field f : fl) {System.out.println(f.getName() + "\t" + f.getType() + "\t"+ f.getModifiers() + "\t"+ Modifier.toString(f.getModifiers()));}Field f = cl.getDeclaredField("stuid");System.out.println(f.getName() + "\t" + f.getType() + "\t"+ f.getModifiers() + "\t"+ Modifier.toString(f.getModifiers()));} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}