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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 爱吃小土豆 中级黑马   /  2014-12-5 22:49  /  3418 人查看  /  8 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

编写一个类A,增加一个实力方法showString,用于打印一条字符串,在编写一个类TestA ,作为客户端,用键盘输入一个字符串,该字符串就是类A的全名,使用反射机制创建该类的对象,并调用该对象中的方法showString 。

  1. public class TestA {
  2.         public static void main(String[] args) throws Exception {
  3.                 Class<?> clazz=Class.forName("Test.A");
  4.                 A a = (A) clazz.newInstance();
  5.                 Method m=clazz.getMethod("showString");
  6.                 m.invoke(a);       
  7.               Scanner sc=new Scanner(System.in);
  8.         }

  9. }
复制代码

”用键盘输入一个字符串,该字符串就是类A的全名“怎么搞啊

8 个回复

正序浏览
学习了......
回复 使用道具 举报
这题还真比“编写一个类,增加一个实例方法用于打印一条字符串。并使用反射手段创建该类的对象, 并调用该对象中的方法” 绕了点呢
回复 使用道具 举报
表示有用,哈哈
回复 使用道具 举报
这个问题我在调试时遇到两个需要注意的:
1、录入时需要些包名+类名
2、类A需要有public 修饰符
回复 使用道具 举报
默默丶 发表于 2014-12-5 22:54
这个代码就是你要的

还有就是传入的类 一定是要把包名带上  这才是完整的类名

感谢感谢
回复 使用道具 举报
这样不好吧。。。。
回复 使用道具 举报
  1. import java.util.Scanner;
  2. import java.lang.reflect.*;
  3. public  class Test {
  4. public static void main(String[] args){
  5.                 Scanner sn = new Scanner();
  6.                 String s = sn.next();
  7.                 getInvoke(s);
  8.                
  9.                
  10.         }

  11.         private static void getInvoke(String s)  {
  12.                 String className=s;
  13.                 Class clazz = Class.forName(className);//返回字节码。返回方式1:字节码曾经存在过已经被加载
  14.                 String methodName = "showString";               
  15.                 Object obj = clazz.newInstance();
  16.                 Method method = clazz.getMethod(methodName,null);
  17.                 method.invoke(obj, null);
复制代码

这个代码就是你要的

还有就是传入的类 一定是要把包名带上  这才是完整的类名
还有就是自己建一个类来作为反射你自己应该能行吧

点评

多多帮助别人,帮别人回答问题,好样的!  发表于 2014-12-5 23:26

评分

参与人数 1黑马币 +6 收起 理由
船长 + 6 好样的

查看全部评分

回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马