java动态加载类小实验

上传人:xiao****1972 文档编号:84978753 上传时间:2019-03-06 格式:DOC 页数:3 大小:69.50KB
返回 下载 相关 举报
java动态加载类小实验_第1页
第1页 / 共3页
java动态加载类小实验_第2页
第2页 / 共3页
java动态加载类小实验_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

《java动态加载类小实验》由会员分享,可在线阅读,更多相关《java动态加载类小实验(3页珍藏版)》请在金锄头文库上搜索。

1、Java动态加载类的意义和目的:Java动态加载类主要是为了不改变主程序代码,通过修改配置文件就可以操作不同的对象执行不同的功能。主要有利于系统的扩展,例如当我要改变一个功能,只需要做一个类,然后编写相应的功能,通过配置文件就可以使用新的功能,不需要修改系统的任何地方,只需要添加一个类;充分实现了松散耦合。满足了开闭原则(对修改关闭,对添加或删除开放);动态加载类设计模式主程序类(含main方法)接口类ICarFactory抽象方法makeCar() 组合 组合Implements实现类BMWFactory实现makeCar()实现类BYDFactory实现makeCar()几个重要概念Int

2、erface(接口):定义了一堆未实现的方法(即抽象方法);它们的具体实现是由要实现这个接口的类来实现方法的具体功能。Class.forName(String className): 将一个给定的字符串通过forName方法转换成一个类类型,例如:Class.forName(“Integer”)他就能产生一个Integer类型;通过newInstance()方法可以产生该类的对象。例如ArrayList arr=(ArrayList)Class.forName(“ArrayList”).newInstance()就产生了一个ArrayList的对象arr,通过它就可以调用ArrayList类的

3、方法。注意:className 对应的字符串的类必须有一个无参的构造方法。Java动态加载类的实现过程(造汽车为例)1. 创建一个接口(ICarFactory),他有一个未实现的方法makeCar()用于制造汽车。2. 有两个类实现了ICarFactory接口,那么他们也实现了makeCar()方法。BYDFactroy类-makeCar()用于制造BYD,他实现了具体的制造BYD的方法BMWFactroy类-makeCar()用于制造BMW,他实现了具体制造BMW的方法3. 创建配置文件xml将相应的类名(类全名=包名+类名)写入相应的位置;4. 创建主程序类,首先声明一个ICarFacto

4、ry类型的变量icf,然后从xml中读出相应的类名,调用Class.forName(className).instance()得到具体类的实例并赋值给icf,最后通过icf调用makeCar()方法,就可以得到一辆造好的汽车。注意:该实验用到的JAR包为dom4j-1.6.1.jar,当然你也可以从property里读或者直接用java解析xml的类这样你就不需要这个外部JAR包了。创建接口package dynamic.test;/接口 用于知道汽车 有一个抽象方法makeCar();实现他的类都要实现该方法public interface ICarFactory public void m

5、akeCar();/等待实现的造车方法创建两个实现了接口的类/创建BYDFactory类,实现了ICarFactorypackage dynamic.test;public class BYDFactory implements ICarFactory /实现了ICarFactory的makeCar()方法public void makeCar() System.out.println(BYDFactroy made a BYD for you);/创建BMWFactory类,实现了ICarFactorypackage dynamic.test;public class BMWFactory

6、implements ICarFactory /实现了ICarFactory的makeCar()方法public void makeCar() System.out.println(BMWFactroy made a BMW for you);创建配置文件Factory.xmldynamic.test.BYDFactory创建测试程序主类package dynamic.test;import java.io.File;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;imp

7、ort org.dom4j.io.SAXReader;public class TestMain /测试程序主类;public static void main(String args)/ 声明接口ICarFactory类型的变量icfICarFactory icf=null;try /读xml可参照读写xml的小实验File file=new File(lib/Factory.xml);SAXReader reader=new SAXReader();Document doc=reader.read(file);Element root=doc.getRootElement();String

8、 className=root.elementText(Factroy-Name);/通过className得到相应的类和类实例,并将其赋给icf;必须确保className/对应的类有一个无参构造方法icf=(ICarFactory) Class.forName(className).newInstance();/制造相应的汽车icf.makeCar();/处理异常 catch (DocumentException e) / TODO Auto-generated catch blockSystem.out.println(找不到该文件.); catch (InstantiationExce

9、ption e) / TODO Auto-generated catch blockSystem.out.println(实例化失败.); catch (IllegalAccessException e) / TODO Auto-generated catch blockSystem.out.println(非法访问.); catch (ClassNotFoundException e) / TODO Auto-generated catch blockSystem.out.println(找不到该类.);程序运行结果 (控制台输出)BYDFactroy made a BYD for you修改配置文件Factory.xml,将dynamic.test.BYDFactory改为dynamic.test.BMWFactorydynamic.test.BMWFactory再次运行程序观看结果(控制台输出)BMWFactroy made a BMW for you可以看到两次运行结果完全不同,并且我们并没有修改程序的任何一处,只是改了配置文件!这就是动态加载类的优势,同时它还可以减轻CPU和内存的负荷。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号