黑马程序员技术交流社区

标题: 这道题怎么弄啊 [打印本页]

作者: 爱吃小土豆    时间: 2014-12-5 22:49
标题: 这道题怎么弄啊
编写一个类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的全名“怎么搞啊
作者: 默默丶    时间: 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);
复制代码

这个代码就是你要的

还有就是传入的类 一定是要把包名带上  这才是完整的类名
还有就是自己建一个类来作为反射你自己应该能行吧
作者: Rain2692    时间: 2014-12-5 23:31
这样不好吧。。。。
作者: 爱吃小土豆    时间: 2014-12-6 10:03
默默丶 发表于 2014-12-5 22:54
这个代码就是你要的

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

感谢感谢
作者: 小马范    时间: 2015-1-15 16:45
这个问题我在调试时遇到两个需要注意的:
1、录入时需要些包名+类名
2、类A需要有public 修饰符
作者: a4903913    时间: 2015-8-29 22:58
表示有用,哈哈
作者: lingxia125    时间: 2015-9-9 21:41
这题还真比“编写一个类,增加一个实例方法用于打印一条字符串。并使用反射手段创建该类的对象, 并调用该对象中的方法” 绕了点呢
作者: 2015竹林风    时间: 2015-11-13 20:21
学习了......




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