java 反射机制

来源:互联网 发布:淘宝免费试用 编辑:程序博客网 时间:2024/06/11 01:07

1.反射机制得到class

代码机构

代码块 One.java 要反射的class

package controller;public class One {private String name = "名字";//名字public int age = 1;//年纪/*public One(String name,int age) {// TODO Auto-generated constructor stubSystem.out.println("构造函数里面"+ name);System.out.println("构造函数里面" + age +"" );}*//** * 私有的 * @param name */private void oneDemo_private(String name){System.out.println("普通方法里面_私有_有参数"+ name);}public void oneDemo_public(){System.out.println("普通方法里面_没有参数"+ name);System.out.println("普通方法里面_没有参数" + age +"" );}public void oneDemo(String name, int age){System.out.println("普通方法里面"+ name);System.out.println("普通方法里面" + age +"" );}public static void oneStatic_Demo(String name, int age){System.out.println("静态普通方法里面"+ name);System.out.println("静态普通方法里面" + age +"" );}}



实现代码块 Two.java

package controller;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;import net.sf.ehcache.config.TerracottaConfiguration.Consistency;public class two {public static void main(String[] args) throws Exception {// TODO Auto-generated method stubnew two().getClass_01();}//得到class 方法public void getClass_01() throws Exception {//根据反射机制 得到类 (里面必须有包,因为是一个字符串)Class forName = Class.forName("controller.One");if (forName != null) {System.out.println("获得成功");System.out.println(forName);//得到对象里面的参数Field field = forName.getField("age");Object newInstance = forName.newInstance();//clss 转 Object Object object = field.get(newInstance);//放入对象,告诉field 是谁的参数System.out.println(object);//访问私有的参数Field declaredField = forName.getDeclaredField("name");declaredField.setAccessible(true);//强行暴力访问,把他的私有变了Object object2 = declaredField.get(newInstance);System.out.println(object2);}// 获取方法if (forName != null){//获取公用的,没有参数("方法名字","参数")Method method = forName.getMethod("oneDemo_public", null);Object newInstance = forName.newInstance();//clss 转 Object  这个是普通类// 获得构造函数 //传 构造函数的(参数)//Constructor constructor = forName.getConstructor(String.class,int.class);//Object newInstance2 = constructor.newInstance(constructor);//启动方法(Object,参数)method.invoke(newInstance, null);////////获取私有用的,没有参数("方法名字","参数类型")Method method_private = forName.getDeclaredMethod("oneDemo_private", String.class);method_private.setAccessible(true);//强行解析method_private.invoke(newInstance, "下次V;扩大过得更好菲利克斯干坏事嘎嘎叫噶;就爱");}}}

















0 0