本篇主要介绍反射的原理及应用
下面通过一个例子来体会反射的好处。
1.首先定义一个PCI接口,里面规定了open和close方法
public interface PCI { public void open(); public void close(); }
2.定义一个实现类NetCard(网卡),实现PCI接口
public class NetCard implements PCI { @Override public void open() { System.out.println("net open"); } @Override public void close() { System.out.println("net close"); } }
3定义一个实现类SoundCard实现PCI接口
public class SoundCard implements PCI { public void open(){ System.out.println("sound open"); } public void close(){ System.out.println("sound close"); } }
4.编写主板类
public class Mainboard { public void run() { System.out.println("main board run...."); } public void usePCI(PCI p) {//PCI p = new SouncCard(); if (p != null) { p.open(); p.close(); } } }
5.编写测试类。
开始调用NetCARD 和SOUNDCARD工作,因为通过反射实现,所以需要读取配置信息。严谨高效的做法是使用XML文件,这里使用Properties集合保存信息。
PCI.properties配置信息中的数据必须是这样的
pci1=cn.itcast.reflect.test.SoundCard
pci2=cn.itcast.reflect.test.NetCard
import java.io.File; import java.io.FileInputStream; import java.util.Properties; /* * 电脑运行。 */ public class ReflectTest { /** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { Mainboard mb = new Mainboard(); mb.run(); //每次添加一个设备都需要修改代码传递一个新创建的对象 // mb.usePCI(new SoundCard()); //能不能不修改代码就可以完成这个动作。 // 不用new来完成,而是只获取其class文件。在内部实现创建对象的动作。 File configFile = new File("pci.properties"); Properties prop = new Properties(); FileInputStream fis = new FileInputStream(configFile); prop.load(fis); for(int x=0; x<prop.size(); x++){ String pciName = prop.getProperty("pci"+(x+1)); Class clazz = Class.forName(pciName);//用Class去加载这个pci子类。 PCI p = (PCI)clazz.newInstance(); mb.usePCI(p); } fis.close(); } }
相关推荐
正在自学黑马程序员Java全套,目前只学了Javase,接下来是Javaweb,把自己整理的笔记分享一下。
黑马程序员——Android移动开发源码
黑马程序员Javaweb教材源代码,适合学习配套使用
黑马程序员c++配套课件 《轻松搞定c++语言》 黑马程序员c++配套课件 《轻松搞定c++语言》
黑马程序员,C++核心编程
《JavaWeb程序设计任务教程》一书源代码,中国工信出版社出版,黑马程序员编著,传智播客旗下高端教育品牌“黑马程序员”项目实战配套用书
Javaweb基础全课程笔记,黑马程序员上课笔记,主要涉及前端 jsp和servlet等
黑马程序员入学面试题,复习必备,事半功倍。
layui ajax 没有node.js功能都可用,高度类似。 黑马刘龙彬老师主讲的大事件项目,整体看完,给...最后,再次给黑马程序员和刘老师点个赞。 说明--ShowDoc https://www.showdoc.com.cn/escook?page_id=3707158761215217
本人参加黑马程序员考试的题目加上本人的解答!不是让谁作弊,因为题库的题目对每个人会有些许的变化。题库题目的难度很类似,就当是你参加模拟考试了!哈哈,附本人的详解的哦!
黑马程序员网上图书商城中的毕业设计资料,代码,数据库设计论文等
《JavaWeb程序开发进阶》-黑马程序员配套资源ppt。
黑马程序员JavaEE49期
Netty基础,用于学习Netty,参考黑马程序员的netty教程
月薪过万的入门必知知识,黑马程序员入学Java精华总结
黑马程序员入学考试题,共10道,资源中有代码和题目。
《MySQL数据库原理、设计与应用》课后习题及答案 黑马程序员编著 答案都是正确的,因为是老师给的资源。 如果不想下载,也可以去我的博客看,一模一样的。 ...
黑马程序员 C语言提高课程配套课件 黑马程序员 C语言提高课程配套课件
day01_Object类、常用API day02_Collection、泛型 day03_List、Set、数据结构、Collections day04_Map,斗地主案例 day05_异常,线程 day06_线程、同步 day07_等待与唤醒案例、线程池、Lambda表达式 ...
安卓黑马程序员课表