黑马程序员技术交流社区

标题: 求解反射的题 [打印本页]

作者: 进击的蜗牛    时间: 2015-5-28 11:20
标题: 求解反射的题
  已知一个类,定义如下:
   package cn.itcast.heima;
     public class DemoClass {
     public void run()
     {
      System.out.println("welcome to heima!");
     }
    }
  (1) 写一个Properties格式的配置文件,配置类的完整名称。
         (2) 写一个程序,读取这个Properties配置文件,获得类的完整名称并加载这个类,用反射 的方式运行run方法。

真心不会,谁能帮帮忙


作者: lwj123    时间: 2015-5-28 14:18
已知一个类,定义如下:
   package cn.itcast.heima;
      public class DemoClass {
      public void run()
      {
       System.out.println("welcome to heima!");
      }
     }
   (1) 写一个Properties格式的配置文件,配置类的完整名称。
  (2) 写一个程序,读取这个Properties配置文件,获得类的完整名称并加载这个类,用反射 的方式运行run方法。

第一步:
创建一个.txt结尾的文件,内容为
className=DemoClass
methodName=run

第二步:写反射程序
class ReflectTool {
     public void method() {
         //读取这个txt文件
         InputStream is = ReflectTool .class.getResourceAsStream("config.txt");
        Properties prop = new Properties(is);
        String className = prop.get("className");
        String methodName = prop.get("methodName");

       //反射操作
       Class cls = Class.forName(className());
       //创建对象
      Constroctor c = cls.getConstrutor();
      //获取Method对象
      Method m = cls.getMethod(methodName);
      m .invoke(c.newInstance());
//完毕

     }
}


作者: tougboy    时间: 2015-5-28 14:45
这不是入学测试题之一吗?我就那个txt文件的格式忘记了,后面的倒还能蒙出来
className= DemClass
methodName = run
首字母小写 ,嗯  这回记住了
作者: 志行    时间: 2015-5-28 15:36
..................................好犀利 原来可以这样 那我也不抽我的入学测试了~~
作者: 开到荼靡    时间: 2015-5-28 20:39
第一步:创建DemoClass类复制题目代码
package cn.itcast.fanshe;

public class DemoClass {
    public void run()
    {
     System.out.println("welcome to heima!");
    }
}
第二步:自己写个测试类
public class Demo {

        public static void main(String[] args) throws Exception {
                // 先创建一个properties用来设置配置文件;
                Properties p=new Properties();
                //设置键值对
                p.setProperty("className", "cn.itcast.fanshe.DemoClass");
                //设置键值对;
                p.setProperty("methodName", "run");
                //创建printStream打印流对象来建立hh.txt
                PrintStream ps=new PrintStream("hh.txt");
                //将p集合中的属性列表输出到ps中。
                p.list(ps);
                ps.close();
                //创建输入流对象;
                FileReader fr=new FileReader("hh.txt");
                //将hh.txt中的属性列表读取到集合中;
                p.load(fr);
                //用getProperty方法通过键取值并String接收;
                String className=p.getProperty("className");
                String methodName=p.getProperty("methodName");
                //获取字节码文件对象;
                Class c=Class.forName(className);
                //反射创建一个对象;
                Constructor con=c.getDeclaredConstructor();
                Object obj=con.newInstance();
                //获取方法;
                Method m=c.getDeclaredMethod(methodName);
                //暴力反射 忽略java语言访问权限检查;
                m.setAccessible(true);
                //调用invoke方法;
                m.invoke(obj);
               
               
        }
       
}
作者: tougboy    时间: 2015-5-29 09:49
楼上这个好   我COPY下来哈




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