java 反射
来源:互联网 发布:淘宝商城加盟代理 编辑:程序博客网 时间:2024/05/01 07:20
1、获得class 文件
//获得字节码 cn.ouc.reflect.HelloWorldClass clazz = Class.forName("cn.ouc.reflect.HelloWorld");System.out.println(clazz);//已知类Class clazz2 = String.class;System.out.println(clazz2);//已知对象Object obj = new ArrayList();Class clazz3 = obj.getClass();System.out.println(clazz3);
2、获取构造方法
2.1 获取共有的构造方法
//获得字节码对象在内存中的表示Class clazz = Class.forName("cn.ouc.reflect.HelloWorld"); //HelloWorld//获得默认构造 HelloWorld()Constructor cons = clazz.getConstructor(); //HelloWorld()//获得实例Object obj = cons.newInstance(); // new HelloWorld();System.out.println(obj);2.2获取私有构造
//获得字节码对象在内存中的表示Class clazz = Class.forName("cn.ouc.reflect.HelloWorld"); //HelloWorld//获得私有的构造,HelloWorld(String str,Integer i) 形参Constructor cons = clazz.getDeclaredConstructor(String.class,Integer.class);//java.lang.IllegalAccessException//System.out.println(cons.isAccessible());//强制设置访问权限cons.setAccessible(true);//实例化 new 实参Object obj = cons.newInstance("admin",12334);
3、获取字段
3.1公共的
HelloWorld h = new HelloWorld();//String s = h.name;//字节码Class clazz = Class.forName("cn.ouc.reflect.HelloWorld"); //HelloWorld//快捷方法 获得默认构造的实例//clazz.getConstructor().newInstance();Object obj = clazz.newInstance(); //obj -- h//获得字段 String name =Field field = clazz.getField("name"); // name//关联 obj.nameObject value = field.get(obj);System.out.println(value);3.2 私有的
//HelloWorld h = new HelloWorld();//String s = h.name;// h.name = xxxx;//字节码Class clazz = Class.forName("cn.ouc.reflect.HelloWorld"); //HelloWorld//快捷方法 获得默认构造的实例//clazz.getConstructor().newInstance();Object obj = clazz.newInstance(); //obj -- h//获得私有字段private Integer ageField field = clazz.getDeclaredField("age");//强制设置访问权限field.setAccessible(true);//关联 obj.ageObject value = field.get(obj);System.out.println(value);//设置值 obj.age = 67field.set(obj, 67);//再次输出value = field.get(obj);System.out.println(value);
4、获取方法
4.1共有方法
//获得方法 print()Method method = clazz.getMethod("print", null);//绑定,指定当前的方法,并将相应的实际参数传递method.invoke(obj, null);4.2私有方法
//实例化Object obj = clazz.newInstance();//获得方法 print(String str , int i) //绕过自动装箱Method method = clazz.getDeclaredMethod("print", String.class,int.class);//强制设置访问权限method.setAccessible(true);//绑定,指定当前的方法,并将相应的实际参数传递method.invoke(obj, "rooot",250);
5、测试类
public class HelloWorld {public HelloWorld(){System.out.println("默认构造方法");}private HelloWorld(String str,Integer i){System.out.println("构造" + str + ":" + i);}public String name = "jack";private Integer age = 23;public void print(){System.out.println("print");}private void print(String str , int i){System.out.println(str + ":" + i);}}
由字节码 ----获取源码的过程
0 0
- 【反射】JAVA反射机制
- JAVA 反射
- java 反射
- Java反射
- java反射
- java反射
- JAVA反射
- java 反射
- Java 反射
- java 反射
- Java反射
- java反射
- JAVA 反射
- java 反射
- Java反射
- java反射
- java 反射
- java 反射
- 浅谈REDIS数据库的键值设计
- GUN automake,autoconf写Makefile(一)
- System.in.read() IOException RuntimeException
- dmosaic资料
- 堆和栈的区别
- java 反射
- JS正则表达式获取字符串中得特定字符
- 随笔吐槽
- win7(win8)下硬盘安装redhat企业版v6双系统
- 简单的通讯薄
- 最长公共子序列
- mac ssh key 的获取
- 网页按钮
- cocos2dx android平台 解决iconv库的移植问题