public class test {
public static void main(String[] str) throws Exception{

Class c = A.class;
Constructor con = c.getConstructor(String.class);
con.newInstance("you"); } class A{
public A(String str){
System.out.println(str);
}
}
}
如果反射获取的是内部类,获取构造函数那里会报 java.lang.NoSuchMethodException 异常,不是内部类就可以运行,为啥呢?

解决方案 »

  1.   

    import java.lang.reflect.Constructor;public class Test
    {
    public static void main(String[] str) throws Exception
    {
    Class c = A.class;

    //建议楼主看一下以下几行代码及注释
    Constructor[] cons = c.getConstructors();//在这里数组中只有一个元素

    for(Constructor ccc : cons)
    {
    Class[] pas = ccc.getParameterTypes();
    for(Class cc : pas)
    {
    //会打印Test和String这两个
    //因为内部类的构造函数中默认有一个外围类的引用
    System.out.println(cc);
    }
    }
    ///////////////////////////////////////////////////
    //////////////////////////////////////////////////
    Constructor con =  c.getConstructor(Test.class,String.class);//所以这里需要多加一个参数
    con.newInstance(new Test(),"you");//这里构造的时候也需要多加一个参数
    }

    class A
    {
    public A(String str)
    {
    System.out.println(str);
    }
    }
    }
      

  2.   

    代码里面不支持变颜色,就再发一次吧!
    import java.lang.reflect.Constructor;public class Test
    {
    public static void main(String[] str) throws Exception
    {
    Class c = A.class;

    //建议楼主看一下以下几行代码及注释
    Constructor[] cons = c.getConstructors();//在这里数组中只有一个元素

    for(Constructor ccc : cons)
    {
    Class[] pas = ccc.getParameterTypes();
    for(Class cc : pas)
    {
    //会打印Test和String两个
    //因为内部类的构造函数中默认有一个外围类的引用
    System.out.println(cc);
    }
    }
    ///////////////////////////////////////////////////
    //////////////////////////////////////////////////
    Constructor con =  c.getConstructor(Test.class,String.class);//所以这里需要多加一个参数
    con.newInstance(new Test(),"you");//这里构造的时候也需要多加一个参数
    }

    class A
    {
    public A(String str)
    {
    System.out.println(str);
    }
    }
    }