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
}
}