public class ReflectMethod { /** * 方法的反射 * @param args */ public static void main(String[] args) throws Exception { String str1="www.baidu.com"; System.out.println(str1.charAt(2)); //我们平时的时候是使用str1.charAt()去调用的方法,然后获取到第二个字符 /** * String str1="aaa"; * String str2="aaaa"; * str1.charAt(); * str2.charAt(); * 我们只是使用某个对象来调用某个方法 * 方法和对象是没有关系的 * * 调用方法,我们必须通过某个对象去调用.我们得到了某个方法, * 方法和对象是没有关系的。我们要想调用某个对象身上的方法, * 就先得到这个方法,然后针对某个对象,调用这个方法 */ //参数需要带要获取的方法的名称 Method methodCharAt=String.class.getMethod("charAt", int.class); //将方法作用在某个对象身上 System.out.println("值为:"+methodCharAt.invoke(str1, 1)); //我们来对这个方法的参数进行改写: //因为jdk1.4之前没有可变参数,它是通过数组来实现的 // new int[]{1,23,44,55}; // new String[]{"abc","def","kkk","qq"}; // new String[]{new Sring("abd"),new String("def"),new String("kkk"),new String("123")}; // new Object[]{new Sring("abd"),new String("def"),new String("kkk"),new String("123")}; // new Object[]{new Sring("abd"),1,new String("kkk"),new String("123")}; //本来1是不行的。但是jdk1.5之后有自动装箱的功能。 //所有的类型都是Object的子类 //所以这样就可以了 System.out.println(methodCharAt.invoke(str1, new Object[]{5})); // new Object[]{} 这里是代表一个参数都没有 所有的类都是object的子类 //new Object[]{2} 这里就是表示有一个 //new Object[]{2} 这里就是new一个object的数组,{数组里面的元素列表},2就说明它是object的 // 整数类型的object,把它给放到object数组中去了,放的是Integer类型。自动装箱了。这个时候,这个 // 数组的长度为1,装了一个integer类型的对象.这个integer的值是2 } }
《黑马程序员》 使用反射获取字节码文件中的方法,布布扣,bubuko.com
原文:http://blog.csdn.net/zhizguoz/article/details/20953401