反射机制写法例子详解!

package cn.com.liheng.entity;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;


public class Test {
public static void main(String[] args) throws Exception {
        //创建添加路径的地址对话框
String cla=JOptionPane.showInputDialog("请输入完整路径:");
//反射forName方法;
Class cla=Class.forName("cn.com.liheng.entity.User");
//查看属性;
Field[] fil=cla.getDeclaredFields();
//增强循环遍历属性;
for (Field fue:fil) {
//打印属性方法;
System.out.println(fue.toString());
}
System.out.println("===========================================");
//查看方法;
Method[] met=cla.getDeclaredMethods();
//增强循环遍历方法;
for (Method meth:met) {
//打印解析详细方法;
System.out.println(meth.toString());
}
System.out.println("++++++++++++++++++++++");
//查看无参数构造方法;
Constructor[]  con=cla.getDeclaredConstructors();
//增强循环遍历构造方法;
for (Constructor jjj:con) {
//打印解析构造方法;
System.out.println(jjj.toString());
}
System.out.println("------------------+++++++++++++++++");
//改变值;
//类点对象;
Class cl=User.class;
//new一个类的实例;
User ue=new User();
//改变属性的值;
Field fie=cl.getDeclaredField("name");
//把私有属性改变成公共属性;
fie.setAccessible(true);
//给属性赋值,第一个参数是对象的实例,第二个是新的值;
fie.set(ue, "jksdf");
//打印解析属性的值;
System.out.println(fie.toString());
System.out.println("_____________________________");
//改变某个方法的属性的值;
Method  me=cl.getDeclaredMethod("na", String.class,int.class);
//把私有方法改变成公共方法;
me.setAccessible(true);
//接收方法的值可以是方法的返回值类型也可以是所有类的父类 ;
//参数1是对象实例2是参数类型的新值;
Object st=me.invoke(ue, "jfdf",12);
//解析打印新的方法属性值;
System.out.println(st.toString());
}
}

猜你喜欢

转载自wyr123789.iteye.com/blog/2073595