黑马程序员技术交流社区
标题:
关于反射?
[打印本页]
作者:
张金
时间:
2012-11-13 19:38
标题:
关于反射?
本帖最后由 张金 于 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();
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2