黑马程序员技术交流社区
标题:
哪里错了着急
[打印本页]
作者:
axing110
时间:
2014-10-30 22:25
标题:
哪里错了着急
package test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/*编写一个类A,增加一个实例方法show用于打印一条字符串。再编写一个TestA,作为客户端,
* 键盘录入一个字符串,该字符串就是类A的全名,使用反射手段创建该类的对象, 并调用该对象中的方法show*/
public class test1{
public static void main(String[] args) throws IOException, ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, SecurityException, IllegalArgumentException, InvocationTargetException
{
System.out.println("请输入一个字符串:");
BufferedReader buff=new BufferedReader(new InputStreamReader(System.in));
String str=buff.readLine();
Class cs= Class.forName(str);
Object obj=cs.getConstructor().newInstance();
Method me=cs.getMethod("show");
me.invoke(obj);
}
}
class A
{
public void show()
{
System.out.println("黑马程序员");
}
}
作者:
xplcc
时间:
2014-10-30 22:42
Object obj=cs.getConstructor().newInstance();改成A obj = (A)cs.getConstructor().newInstance();
作者:
sk0806
时间:
2014-10-30 22:50
本帖最后由 sk0806 于 2014-10-30 22:53 编辑
Object obj=cs.getConstructor().newInstance();改为Object obj=cs.newInstance();可以调用到show方法输入字符串时,加上你的包名:test.A
作者:
刘家斌
时间:
2014-10-30 22:53
Object obj=cs.getConstructor().newInstance();
Method me=cs.getMethod("show");
me.invoke(obj);
这三句话,首先你第一句创建的是object类型的对象,这个是多态,但object类中没有show方法,再次getMethod方法和invoke方法都是接收的两个参数吧,是不是应该加个null?
作者:
MeryStyle
时间:
2014-10-30 23:14
obj 忘了强转类型了
作者:
wzg1015
时间:
2014-10-31 07:52
本帖最后由 wzg1015 于 2014-10-31 08:06 编辑
cs.getConstructors(),你先通过这个来将全部的构造函数取出后打印,会发现一个都没找到。这种问题要么是没有,要么是没权限。
你的class A 是默认的,也就是说它的构造函数也是默认的,而cs.getConstructor()是找到的public构造函数,所以是找不到的。要么将A的构造函数改成public,要么新建一个A.java,移出去,类修饰改成public
作者:
axing110
时间:
2014-10-31 08:03
晕死都不是大家讲的原因哦噢噢噢噢,我自己找到了,不容易发现的原因,是因为我的构造函数是隐式的,没有被public修饰,所以在getConstructor无法找到这样的一个构造函数,改成getDeclareConstructor就可以了呵呵感谢大家。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2