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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 惠惠惠惠惠 中级黑马   /  2014-12-31 19:25  /  1826 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

编写一个类A,增加一个实例方法show用于打印一条字符串。再编写一个TestA,

作为客户端,键盘录入一个字符串,该字符串就是类A的全名,使用反射手段创建该

类的对象, 并调用该对象中的show方法)个数据即可。""

到底怎么做啊。。

11 个回复

倒序浏览
我帮你试试
回复 使用道具 举报
用反射获取方法
回复 使用道具 举报
1. 创建一个类A,创建私有的String 属性.并创建它public一个参数的构造函数.还有一个方法showString.
*                2. 创建一个TestA类,从键盘接受一个字符串,System.in; --接受的就是cn.cast.itheima01.A
*                3. 获取到这个录入的字符串.
*                4. 主函数,这边获取到A类的字节码,再通过字节码创建一个参数的构造函数.再通过这个构造
*                函数,传入我们录入的字符串s. 最后,对象.方法()就可以了.

只给你思路吧,多思考思考,
回复 使用道具 举报
我已经做好了需要代码吗,但是没有注释
  1. package it.cast01;

  2. public class A {
  3.         public void show(String str){
  4.                 System.out.println(str);
  5.         }
  6. }


  7. package it.cast01;

  8. import java.lang.reflect.Constructor;
  9. import java.lang.reflect.Method;
  10. import java.util.Scanner;

  11. public class TestA {

  12.         public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, Exception {
  13.                 Scanner sc=new Scanner(System.in);
  14.                 String str=sc.nextLine();
  15.                 Class c=Class.forName(str);
  16.                 Constructor con=c.getConstructor(null);
  17.                 Object obj=con.newInstance();
  18.                 Method m=c.getMethod("show", String.class);
  19.                 m.invoke(obj, "hello world");
  20.                
  21.         }

  22. }
复制代码
回复 使用道具 举报
这叫还没学到反射的学渣如何是好
回复 使用道具 举报
927233671 发表于 2014-12-31 20:39
我已经做好了需要代码吗,但是没有注释

你这个貌似不行啊 A类找不到啊
回复 使用道具 举报
927233671 发表于 2014-12-31 20:39
我已经做好了需要代码吗,但是没有注释

你这个貌似不行啊 A类找不到啊
回复 使用道具 举报
927233671 发表于 2014-12-31 20:39
我已经做好了需要代码吗,但是没有注释

你这个从语法上也不对啊,你把构造函数实例化有用吗
我给你改了改你的代码,这次就能运行了。
  1. package 高新技术;
  2. import java.lang.reflect.Constructor;
  3. import java.lang.reflect.Method;
  4. import java.util.Scanner;

  5. public class 输入一个类调用其中的方法 {

  6.         public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, Exception {
  7.                 Scanner sc=new Scanner(System.in);
  8.                 String str=sc.nextLine();
  9.                 Class c=Class.forName(str);
  10. //Constructor con=c.getConstructor(null); 删了
  11. //Object obj=con.newInstance(); 删了
  12.                 Method m=c.getMethod("show", String.class);
  13.                 m.invoke(c.newInstance(), "hello world");
  14.         }
  15. }
  16. class A {
  17.     public void show(String str){
  18.             System.out.println(str);
  19.     }
  20. }
复制代码
回复 使用道具 举报 0 1
咳咳,留下代码。


  1. import java.lang.reflect.InvocationTargetException;

  2. /**
  3. * 7、 编写一个类,增加一个实例方法用于打印一条字符串。
  4. *
  5. * 并使用反射手段创建该类的对象, 并调用该对象中的方法。
  6. *
  7. * 思路:
  8. *
  9. * 1、定义一个类,里面定义一个打印字符串的方法。
  10. *
  11. * 2、在主函数里通过反射获取该类的字节码文件对象,并且创建该类的实例对象。
  12. *
  13. * 3、通过获取的类的实例对象调用该类的方法。
  14. */

  15. class Test7DemoClass {

  16.         // 定义方法,打印字符串
  17.         public void show(String name) {

  18.                 System.out.println("Hello " + name);
  19.         }
  20. }

  21. public class Test07 {

  22.         public static void main(String[] args) throws InstantiationException,
  23.                         IllegalAccessException, IllegalArgumentException,
  24.                         InvocationTargetException, NoSuchMethodException, SecurityException {

  25.                 // 获取Test7DemoClass类的字节码文件对象
  26.                 Class<Test7DemoClass> clazz = Test7DemoClass.class;

  27.                 // 通过字节码文件对象创建实例对象。
  28.                 Test7DemoClass tdc = (Test7DemoClass) clazz.newInstance();

  29.                 // 通过对象调用类里的show方法。
  30.                 tdc.show("Eagle");
  31.         }

  32. }
复制代码
回复 使用道具 举报
前面的反射调用方法我会就是怎么才能让键盘录入一个字符串,该字符串就是类A的全名
回复 使用道具 举报
明天就要面试了,看到了这道题目,加油↖(^ω^)↗!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马