java反射
来源:互联网 发布:在哪寻找淘宝客 编辑:程序博客网 时间:2024/05/29 03:17
package pack;import java.io.FileReader;import java.lang.reflect.Constructor;import java.lang.reflect.Method;import java.util.ArrayList;import java.util.Properties;class Person { public int age; public String name; public Person() {} private Person(int age) { this.age = age; } public Person(int age, String name) { this.age = age; this.name = name; } public void show() { System.out.println("show"); } public void show2(int a) { System.out.println(a); } public void method() { System.out.println(this.age+"---"+this.name); } @Override public String toString() { return "Person [age=" + age + ", name=" + name + "]"; }}public class Main { public static void main(String[] args) throws Exception { //1.获取字节码文件对象 /*Person p = new Person(); //方法1 Class c1 = p.getClass();*/ //Class c = Person.class; //方法2 /*try { Class c3 = Class.forName("pack.Person"); //方法3,最常用,它可以写成配置文件,下面代码不知是谁 } catch (ClassNotFoundException e) { e.printStackTrace(); }*/ //2.获取构造函数对象 /* Constructor[] cons = c.getConstructors(); //构造函数为public才能获取 for(Constructor con : cons) System.out.println(con);*/ /*Constructor cons1 = c.getConstructor(); // 无参构造函数public Object obj = cons1.newInstance(); System.out.println(obj);*/ /* Constructor cons2 = c.getConstructor(int.class, String.class); //有参构造函数public Object obj = cons2.newInstance(34, "bob"); System.out.println(obj);*/ /*Constructor cons3 = c.getDeclaredConstructor(int.class); //私有构造函数 cons3.setAccessible(true); //使私有构造能访问 Object obj = cons3.newInstance(33); System.out.println(obj);*/ //3.获取成员变量 //Filed f = c.getFields(); /*Field[] f1 = c.getDeclaredFields(); //获取所有成员变量 for(Field f : f1) System.out.println(f);*/ /*Field f2 = c.getField("name"); //获取名为name的成员变量 Field f3 = c.getField("age"); f2.setAccessible(true); f3.setAccessible(true); Constructor cons4 = c.getConstructor(); //建个对象,下面赋值 Object obj = cons4.newInstance(); f2.set(obj, "alice"); f3.set(obj, 35); System.out.println(obj); */ //获取成员方法 /* Method[] m1 = c.getMethods(); //获取自己和父类所有成员方法 for(Method method : m1) System.out.println(method); Method m2 = c.getMethod("show"); //第一个参数是方法名,第二个参数是方法参数 Constructor cons5 = c.getConstructor(); Object obj = cons5.newInstance(); m2.invoke(obj); */ /* Method m3 = c.getMethod("show2", int.class); //第一个参数是方法名,第二个参数是方法参数 Constructor cons6 = c.getConstructor(); Object obj2 = cons6.newInstance(); m3.invoke(obj2, 4); //调方法,有返回值就要接收*/ //----------------------------------配置方法------------------------------------------ //class.txt中:ClassName:pack.Person // MethodName:show Properties p = new Properties(); FileReader fr = new FileReader("class.txt"); p.load(fr); fr.close(); String classname = p.getProperty("ClassName"); String methodname = p.getProperty("MethodName"); Class c1 = Class.forName(classname); Constructor cons = c1.getConstructor(); Object obj = cons.newInstance(); Method m = c1.getMethod(methodname); m.invoke(obj);//---------------------------------------------------------------------------- //在ArrayList<Integer>对象中添加字符串数据 ArrayList<Integer> al = new ArrayList<Integer>(); Class c7 = al.getClass(); //Class c7 = ArrayList.class; Method m3 = c7.getMethod("add", Object.class) ; m3.invoke(al, "hello"); System.out.println(al); }}
0 0
- 【反射】JAVA反射机制
- JAVA 反射
- java 反射
- Java反射
- java反射
- java反射
- JAVA反射
- java 反射
- Java 反射
- java 反射
- Java反射
- java反射
- JAVA 反射
- java 反射
- Java反射
- java反射
- java 反射
- java 反射
- linux下设置代理服务器
- maven + eclipse 问题记录
- 通过脚本添加组件 NavMeshAgent寻路动画设置,动画speed设置,随机奔跑寻路,间隔实例化InvokeRepeating ("Run", 0, i)
- phoenix操作注意点
- Leetcode NO.141 Linked List Cycle
- java反射
- Swift学习-基础语法(一)
- 欢迎使用CSDN-markdown编辑器
- C++ string自定义函数
- ImageView.ScaleType属性介绍
- datenode没有启动
- poj 1611 The Suspects
- hdoj 2602 Bone Collector(模板)
- eclipse工作空间无法打开