通过反射动态执行对象的方法的步骤是什么
2个回答
2016-08-10 · 知道合伙人互联网行家
关注
展开全部
这个属于java反射机制范围:在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这 种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。主要功能:在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对 象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法,生成动态代理。
动态执行当前类或其父类的方法,支持私有方法。
具体实现方法如下:
public static void main(String[] args) throws Exception{
Class c = Dynamic.class;//得到对象
Method[] methods = c.getDeclaredMethods();//得到方法
for(Method method : methods){
System.out.print(method.getName());//打印参数名 Class[] parameterTypes = method.getParameterTypes();
for(int i=0;i<parameterTypes.length;i++){
String nameString=parameterTypes[i].getName();
System.out.print("parameterType:"+nameString);//打印方法参数类型 }
System.out.print("ReturnType:"+method.getReturnType());
System.out.println();
}
Object obj=c.newInstance();//获取到方法对象,假设方法的参数是一个int,String,method名为getAge
Method sAge = c.getMethod("getAge", new Class[] {int.class,String.class});
//获得参数Object
Object[] arguments = new Object[]{new Integer(23),new String("abc")};
//执行方法
String s=(String)sAge.invoke(obj , arguments);
System.out.print(s);
}
public String getAge(int age,String name){
return name+": "+age;
}
}
展开全部
package test.entity;
public class HelloWorld {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void hello(){
System.out.println("hello world");
}
}
------------------------------------------------------------------------------------
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, SecurityException, NoSuchMethodException, IllegalArgumentException, InvocationTargetException {
Class clazz = Class.forName("test.entity.HelloWorld");
Object obj = clazz.newInstance();
clazz.getMethod("hello").invoke(obj);
}
public class HelloWorld {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void hello(){
System.out.println("hello world");
}
}
------------------------------------------------------------------------------------
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, SecurityException, NoSuchMethodException, IllegalArgumentException, InvocationTargetException {
Class clazz = Class.forName("test.entity.HelloWorld");
Object obj = clazz.newInstance();
clazz.getMethod("hello").invoke(obj);
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询