通过反射初始化构造方法,调用成员方法
package testPack;
public class Counter {
double a;
double b;
public Counter() {
super();
}
private Counter(double a, double b) {
super();
this.a = a;
this.b = b;
}
private double add(){
return a+b;
}
protected double subtraction(){
return a-b;
}
public double multiplication(){
return a*b;
}
public double division(){
return a/b;
}
@Override
public String toString() {
return "Counter [a=" + a + ", b=" + b + "]";
}
}
package testPack;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
public class classTest {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Class<?> c = Class.forName("testPack.Counter");
Constructor<?> con = c.getDeclaredConstructor(double.class,double.class);
// 使用私有构造方法需要打开权限
con.setAccessible(true);
// 调用带参构造创建对象
Object ob = con.newInstance(5.0,5.0);
// 确定要调用的方法,获取add方法
Method method = c.getDeclaredMethod("add");
// 因为Counter中的add方法是私有的,所以要打开权限
method.setAccessible(true);
System.out.println(method);
// 通过创建的对象调用add方法
Object invoke = method.invoke(ob);
System.out.println(invoke);
System.out.println("==========");
Method newMethod = c.getDeclaredMethod("multiplication");
Object newInvoke = newMethod.invoke(ob);
System.out.println(newInvoke);
}
}
运行结果:
private double testPack.Counter.add()
10.0
==========
25.0