黑马程序员技术交流社区

标题: 反射问题 [打印本页]

作者: 何羡玉    时间: 2013-5-4 15:08
标题: 反射问题
本帖最后由 何羡玉 于 2013-5-5 21:26 编辑

我创建了一个类,想通过反射建立实例对象,调用里面的方法,编译正确,运行异常,是哪里错啊。
package enhanceTest;
import java.lang.*;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
public class reflectTest {
reflectTest(){}
    public void printString()
    {
     System.out.println("反射出来了");
    }
/**
  * @param args
  * @throws ClassNotFoundException
  * @throws SecurityException
  * @throws NoSuchMethodException
  * @throws InvocationTargetException
  * @throws IllegalArgumentException
  * @throws IllegalAccessException
  * @throws InstantiationException
  */
public static void main(String[] args) throws Exception
{

Constructor constructor=Class.forName("reflectTest").getConstructor(null);
    reflectTest re=(reflectTest)constructor.newInstance(null);
    re.printString();
}
}

@[FR@Y491VT~HSFG9$PTWEF.jpg (56.1 KB, 下载次数: 0)

@[FR@Y491VT~HSFG9$PTWEF.jpg

作者: 谢达    时间: 2013-5-4 17:12
public Constructor<T> getConstructor(Class<?>... parameterTypes)  throws NoSuchMethodException,SecurityException返回一个 Constructor 对象,  它反映此 Class 对象所表示的类的指定公共构造方法。你这里是默认的访问权限所以不行,加上public就可以了
作者: 何羡玉    时间: 2013-5-4 18:51
谢达 发表于 2013-5-4 17:12
public Constructor getConstructor(Class... parameterTypes)  throws NoSuchMethodException,SecurityEx ...

加了public 还是不行呀

作者: 黄玉昆    时间: 2013-5-4 22:46
你在forName()的参数中,把类名写全,加上包名,你再试试
作者: 何羡玉    时间: 2013-5-5 21:22
黄玉昆 发表于 2013-5-4 22:46
你在forName()的参数中,把类名写全,加上包名,你再试试

加了public后 再加包名就ok了  如果不加public加包名也没有用   如果把构造函数给去掉  只加包名也ok。 哈哈 都试了一下




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2