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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张金 中级黑马   /  2012-11-13 19:38  /  1068 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张金 于 2012-11-24 13:50 编辑

虽然这段代码自己都有敲注释,但是对反射还是不太理解,谁能就这段代码好好分析一下,反射技术到底是一个什么样的模型,用来实现了哪些作用,该怎么去理解?
package cn.itcast.test;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;

public class NoteBookTest {

    /**
     * @param args
     * @throws IOException
     * @throws Exception
     */
    public static void main(String[] args) throws IOException, Exception {
//new一个NoteBook对象,调用run方法,useUSB方法;
        NoteBook book = new NoteBook();
        book.run();
        book.useUSB(null);
        
        //虽然这样可以解决问题,但是每次增加一个设备,都需要对其源码进行改动。
        //所以我们希望对外提供配置文件。在不改动源码的情况下,就可以完成该设备的使用。
//        book.useUSB(new USBMouse());
//创建一个File类对象,与usb.proprities配置文件关联,这样就可以File类中的方法来操作。
File confile = new File("usb.properties");
     //判断这个confile文件类是否存在,如果不存在就创建一个;   
        if(!confile.exists()){
            confile.createNewFile();
        }
  //定义一个Properties容器,   
        Properties properties = new Properties();
    //定义一个文件输入流,与confile文件类对象关联;  
        FileInputStream fis = new FileInputStream(confile);
   //把confile类中的配置信息,就是相应的类装载进容器;以类名和类信息的键值对方式;     
        properties.load(fis);
      //遍历容器里的类,并实例化相应类信息  
        for(int x=1; x<=properties.size(); x++){
//获得类名
            
            String className = properties.getProperty("usb"+x);
   //获得类名的实例类;         
            Class clazz = Class.forName(className);
       //实例化类对象     
            USB usb = (USB)clazz.newInstance();
          //调用book的useUSB方法,把得到的实例对象作为参数传进去,实现对book类的功能扩展。  
            book.useUSB(usb);
        }
        
        fis.close();
    }

}
------------------------------------------------------------------------------------
package cn.itcast.test;

public class NoteBook {

    public void run() {
        System.out.println("notebook run...");
    }

    public void useUSB(USB usb) {
        if (usb != null) {
            usb.open();
            usb.close();
        }
    }
}
---------------------------------------------------------------------
package cn.itcast.test;

public interface USB {

    public void open();
   
    public void close();
}






  

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

0 个回复

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