A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© axing110 中级黑马   /  2014-10-30 22:25  /  1492 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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("黑马程序员");
        }
}


评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 淡定

查看全部评分

6 个回复

正序浏览
晕死都不是大家讲的原因哦噢噢噢噢,我自己找到了,不容易发现的原因,是因为我的构造函数是隐式的,没有被public修饰,所以在getConstructor无法找到这样的一个构造函数,改成getDeclareConstructor就可以了呵呵感谢大家。
回复 使用道具 举报
本帖最后由 wzg1015 于 2014-10-31 08:06 编辑

cs.getConstructors(),你先通过这个来将全部的构造函数取出后打印,会发现一个都没找到。这种问题要么是没有,要么是没权限。
你的class A 是默认的,也就是说它的构造函数也是默认的,而cs.getConstructor()是找到的public构造函数,所以是找不到的。要么将A的构造函数改成public,要么新建一个A.java,移出去,类修饰改成public
回复 使用道具 举报
MeryStyle 来自手机 中级黑马 2014-10-30 23:14:50
报纸
obj 忘了强转类型了
回复 使用道具 举报
Object obj=cs.getConstructor().newInstance();
Method me=cs.getMethod("show");
me.invoke(obj);
这三句话,首先你第一句创建的是object类型的对象,这个是多态,但object类中没有show方法,再次getMethod方法和invoke方法都是接收的两个参数吧,是不是应该加个null?
回复 使用道具 举报
本帖最后由 sk0806 于 2014-10-30 22:53 编辑

Object obj=cs.getConstructor().newInstance();改为Object obj=cs.newInstance();可以调用到show方法输入字符串时,加上你的包名:test.A
回复 使用道具 举报
Object obj=cs.getConstructor().newInstance();改成A obj = (A)cs.getConstructor().newInstance();
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马