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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

一道用运用到反射的题目,大家看看还有没有更简单的方法
package com.itheima;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.Method;
import java.util.Properties;
import cn.itcast.heima.DemoClass;

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

        /**
         * @param args
         */
        public static void main(String[] args)throws Exception
        {
        setProperties();//定义一个方法将已知类存进Properties格式的文件中
        getProperties();//用反射运行run方法
        }
        public static void setProperties()throws IOException
        {
                File file = new File("D:","class.Properties");
            BufferedWriter bfw = new BufferedWriter(new FileWriter(file));
            Properties p = new Properties();
            p.setProperty("ClassName", "cn.itcast.heima.DemoClass");//将类名和方法名存入集合中
            p.setProperty("MethodName", "run");
            p.store(bfw,null);//通过流写入文件中
            bfw.close();
        }
    public static void getProperties()throws Exception//因为反射方法需要抛出异常,所以此处不用IO异常
    {
            File file = new File("D:","class.Properties");
            BufferedReader bfr = new BufferedReader(new FileReader(file));
            Properties p =new Properties();
            p.load(bfr);// 将文件加载到集合中
            String s =p.getProperty("ClassName");
            String str=p.getProperty("MethodName");
        Class<?> clazz =Class.forName(s);
        DemoClass per = (DemoClass)clazz.newInstance();//通过反射获取类对象
        Method m = clazz.getMethod(str);//调用方法
        m.invoke(per);
    }
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马