java 反射机制

xiaoxiao2021-02-28  118

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 stub System.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 stub new 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;扩大过得更好菲利克斯干坏事嘎嘎叫噶;就爱"); } } }

转载请注明原文地址: https://www.6miu.com/read-32370.html

最新回复(0)