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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 进击的蜗牛 中级黑马   /  2015-5-28 11:20  /  1031 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

真心不会,谁能帮帮忙

评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1

查看全部评分

6 个回复

倒序浏览
已知一个类,定义如下:
   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());
//完毕

     }
}

回复 使用道具 举报
这不是入学测试题之一吗?我就那个txt文件的格式忘记了,后面的倒还能蒙出来
className= DemClass
methodName = run
首字母小写 ,嗯  这回记住了

点评

加油  发表于 2015-5-28 17:36
回复 使用道具 举报
..................................好犀利 原来可以这样 那我也不抽我的入学测试了~~
回复 使用道具 举报
第一步:创建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);
               
               
        }
       
}
回复 使用道具 举报
楼上这个好   我COPY下来哈
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马