java构造方法、成员变量、方法所对应的反射实例
来源:互联网 发布:张松献图 知乎 编辑:程序博客网 时间:2024/06/11 03:13
最原始的class类中包含着一些构造器,包,方法,属性等等内容,我们可以通过字节码文件得到对应的一个构造器
,并指明是那种构造器通过参数进行设置,然后通过Constructior类进行实例对象
package test;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.util.Arrays;/** * @author Dqd * 构造方法的反射 Constructor类 * 成员变量的反射 Field类 * 方法的反射 Method类 * 通过反射的方式调用main方法 * */public class test {public static void main(String[] args) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, InstantiationException, InvocationTargetException, NoSuchMethodException, ClassNotFoundException {//构造方法的反射,通常通过类得到构造器然后通过newInstance()来创建实例Constructor<?>[] con = stu.class.getConstructors();stu st1 = (stu)con[0].newInstance(3,4);//通过getField来得到可以访问的变量,然后Field变量对应到相应的实力上取出对应值//如果我们通过st1.getClass().getField("x"),因为X为私有所以不能访问但是可以通过DeclaredField访问//尚若查看需要用到包级反射,修改权限,最后才能打印Field f = st1.getClass().getDeclaredField("x");f.setAccessible(true);System.out.println(f.get(st1));//通过修改字节码文件来对String类型中的'a'改变成为'b'changeCharAtoB(st1);System.out.println(st1);//方法的反射String str="abc";Method methodCharAt = String.class.getMethod("charAt", int.class);//invoke作用于那个对象的身上(对象和方法没有什么关系)System.out.println(methodCharAt.invoke(str, 1));//如果invoke()的第一个参数为null,那么意味是静态的方法//正常的情况下我们调用main方法/*TestArguements.main(new String[]{"123","456"});*///通过反射来调用,为什么要通过反射去掉用呢?我们可能会遇到给main方法传一些参数但是不知道去执行哪个类String starClassName = args[0];Method mainMethod = Class.forName(starClassName).getMethod("main", String[].class);//这里使用一个object[]的原因是java传进去数组,会自动的拆开String相当于传了两个参数而实际上只需要一个mainMethod.invoke(null,new Object[]{ new String[]{"123","456"}});//或者使用下面的//mainMethod.invoke(null,( Object)new String[]{"123","456"});int [] a1 = {1,2,3};int[][] a2 = new int[2][3];String[] a3 = {"123","456"};//输出的结果分别是[[I@10eb6ae],[123, 456]后者属于Object[](因为接收时分为Object[]和<T>类型),而String[]符合//但是int[]不符合只能按照jdk1.4的以对象形式输出System.out.println(Arrays.asList(a1));System.out.println(Arrays.asList(a3));}public static void changeCharAtoB(Object obj) throws IllegalArgumentException, IllegalAccessException{Field[] fields = obj.getClass().getFields();for(Field f:fields){//if(f.getType().equals(String.class){//字节码的比较使用等号因为实用的字节码if(f.getType()==String.class){String oldVal = (String) f.get(obj);String newVal = oldVal.replace('a', 'b');f.set(obj, newVal);//System.out.println(newVal);}}}}class TestArguements{public static void main(String[] args){for(String s:args){System.out.println(s);}}}
stu:
package test;public class stu {private int x;public int y;public String str1="ball";public String str2 = "basket";public stu(int x, int y) {this.x = x;this.y = y;}@Overridepublic String toString() {return str1 +'\n'+" "+str2;}}
0 0
- java构造方法、成员变量、方法所对应的反射实例
- java反射的应用 构造方法 成员变量
- java反射2-获取构造方法、成员变量、成员方法
- java反射之获取方法,成员变量,构造方法
- 构造方法_普通方法_成员变量的反射
- JAVA反射中类的构造函数,成员变量,成员方法的使用
- 使用java反射操作类的构造函数,成员变量和成员方法
- 黑马程序员——【Java反射学习】方法的反射/成员变量的反射/构造函数的反射
- 反射_通过反射获取成员变量、构造方法、成员方法的使用
- 通过反射获取构造方法,成员变量及成员方法
- java反射,获取类的方法,成员变量,构造函数信息
- Java反射---Class对象,获得类的方法、成员变量和构造函数信息
- Java的类成员变量,实例变量,类变量,成员方法,实例方法,类方法
- 18 理解反射的概念19构造方法的反射应用20成员变量的反射 21成员变量反射的综合案例22成员方法的反射
- java开发之成员变量及成员方法的反射
- 构造函数、成员变量、成员方法、静态方法、数组的反射应用
- 【类反射】类的调用(调用类中的成员:成员变量、方法、构造方法)
- Java 类的成员变量和方法以及构造方法
- Linux TCP协议使用线程实现并发服务器
- POJ 1061 青蛙的约会
- 关注递归数列
- 编程规范
- Qt小总结
- java构造方法、成员变量、方法所对应的反射实例
- c++參考手冊
- 编译原理(5)-----2型文法和下推自动机
- 基于形态学操作提取水平和垂直线条(五线谱中音符和乐谱线的分离)
- 绝对值排序
- PAT 乙级 1011
- 记录下几个数组去重的方法
- 洛谷 P1341 无序字母对(欧拉路)
- php连接不上mysql(CentOS)