可以通过 Class.forName("...").newInstance(); 来获得一个类的实例
只要传入类的名字就可以产生实例
有没有什么方法通过传入 方法名字 来执行某个方法 ?

解决方案 »

  1.   

    你现在已经能够获得类的实例了,通过实例的getClass()返回Class对象,然后通过这个Class对象 的
    public Method getDeclaredMethod(String name,
                                    Class... parameterTypes)
                             throws NoSuchMethodException,
                                    SecurityException返回一个 Method 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明方法。name 参数是一个 String,它指定所需方法的简称,parameterTypes 参数是 Class 对象的一个数组,它按声明顺序标识该方法的形式参数类型。如果在某个类中声明了带有相同参数类型的多个方法,并且其中有一个方法的返回类型比其他方法的返回类型都特殊,则返回该方法;否则将从中任选一个方法。如果名称是 "<init>” 或 “<clinit>",则引发一个 NoSuchMethodException。方法或者
    public Method getMethod(String name,
                            Class... parameterTypes)
                     throws NoSuchMethodException,
                            SecurityException返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法。name 参数是一个 String,用于指定所需方法的简称。parameterTypes 参数是按声明顺序标识该方法形式参数类型的 Class 对象的一个数组。如果 parameterTypes 为 null,则按空数组处理。 
    来获得你指定的Method对象,然后通过Method类的
    public Object invoke(Object obj,
                         Object... args)
                  throws IllegalAccessException,
                         IllegalArgumentException,
                         InvocationTargetException对带有指定参数的指定对象调用由此 Method 对象表示的基础方法。个别参数被自动解包,以便与基本形参相匹配,基本参数和引用参数都随需服从方法调用转换。 
    如果基础方法是静态的,那么可以忽略指定的 obj 参数。该参数可以为 null。 如果基础方法所需的形参数为 0,则所提供的 args 数组长度可以为 0 或 null。 如果基础方法是实例方法,则使用动态方法查找来调用它,这一点记录在 Java Language Specification, Second Edition 的第 15.12.4.4 节中;在发生基于目标对象的运行时类型的重写时更应该这样做。 如果基础方法是静态的,并且尚未初始化声明此方法的类,则会将其初始化。 如果方法正常完成,则将该方法返回的值返回给调用方;如果该值为基本类型,则首先适当地将其包装在对象中。但是,如果该值的类型为一组基本类型,则数组元素不 被包装在对象中;换句话说,将返回基本类型的数组。如果基础方法返回类型为 void,则该调用返回 null。 方法来执行这个Method。详细的使用方法参考sun的API文档
      

  2.   

    上面说的就是java的反射机制。相关的类都在java.lang.reflect、java.lang.ref包中