Java反射机制中调用方法
1.调用构造方法
测试类如下:
private Po(String name) {
super();
this.name = name;
System.out.println("name:"+name);
}
public Po(int age, String name) {
super();
this.age = age;
this.name = name;
System.out.println("age:"+age+"name:"+name);
}
1.1调用public构造方法(newInstance)
Po po = new Po();
Class c1 = po.getClass();
Constructor constructor;
Class[] p = {int.class,String.class};
constructor = c1.getDeclaredConstructor(p);
constructor.newInstance(24,"chd");//age:24name:chd
1.2调用私有构造方法
Class[] p1 = {String.class};
constructor = c1.getDeclaredConstructor(p1);
//调用私有构造方法需使用:setAccessible(true)方法
constructor.setAccessible(true);
constructor.newInstance("chd");//name:chd
2.调用类的私有方法
测试类添加一个私有方法
private void hello(String arg){
System.out.println(arg);
}
调用私有方法
Class[] p2 ={String.class};
//第一个参数是方法名,第二个参数是参数类型
Method method =c1.getDeclaredMethod("hello", p2);
method.setAccessible(true);
Object arr[] ={"你好 java"};
//invoke需要两个参数一个是类的实例,一个是方法参数。
method.invoke(po, arr);//你好 java