2023年3月

章节4课时16设计模式之_strategy_01

7个排序口诀:冒择路(入)兮(希尔)快归堆。 冒泡,选择,插入,希尔,快速,归并,堆排序。

==19课 老师上传错视频了,

==20课

使用

==21课时

Interface Comparable 内比较器
Interface Comparator 外比较比较器

1、Comparable与Comparator浅析 - 朱小厮的博客 - CSDN博客
http://blog.csdn.net/u013256816/article/details/50899416

 Collections.sort(list2,new Comparator<Person2>(){
@Override
public intcompare(Person2 o1, Person2 o2)
{
if(o1 == null || o2 == null)return 0;return o1.getAge()-o2.getAge();
}
});

2、Java中Comparable和Comparator区别小结 - 温布利往事 - 博客园--更容易看明白
http://www.cnblogs.com/xujian2014/p/5215082.html

public class PersonCompartor implements Comparator<Person>{
@Override
public intcompare(Person o1, Person o2)
{
return o1.getAge()-o2.getAge();
}
}
//调用 Arrays.sort(people,new PersonCompartor());

那么:  Collections.sort()   Arrays.sort() 区别是什么?

==22课时

策略模式:定义一个策略比较器,然后由具体的比较策略来决定谁大谁小

游戏:发射炮弹的策略:发一炮,多炮,发大炮 等等。

==23课时

==24课

所有的设计模式中最难的一个

==组合和聚合是有很大区别的
组合和聚合是有很大区别的,这个区别不是在形式上,而是在本质上:
比如A类中包含B类的一个引用b,当A类的一个对象消亡时,b这个引用所指向的对象也同时消亡(没有任何一个引用指向它,成了垃圾对象),
这种情况叫做组合,反之b所指向的对象还会有另外的引用指向它,这种情况叫聚合。
在实际写代码时组合方式一般会这样写:
A类的构造方法里创建B类的对象,也就是说,当A类的一个对象产生时,B类的对象随之产生,当A类的这个对象消亡时,它所包含的B类的对象也随之消亡。
聚合方式则是这样:
A类的对象在创建时不会立即创建B类的对象,而是等待一个外界的对象传给它
传给它的这个对象不是A类创建的。
现实生活中:
人和人和手,脚是组合关系,因为当人死亡后人的手也就不复存在了。人和他的电脑是聚合关系。
==随机数
random.nextInt() 为 java.util.Random类中的方法; 
Math.random() 为 java.lang.Math 类中的静态方法。
==动态代理
  

不用通过类继承的方式,会产生很多类出来,类爆炸。聚合的本质

任何实现了Moveabel接口的对象都可以被我这个代理 作为被代理对象。可以代理直接的相互组合。

静态代理:

组合和聚合是有很大区别的,这个区别不是在形式上,而是在本质上:
比如A类中包含B类的一个引用b,当A类的一个对象消亡时,b这个引用所指向的对象也同时消亡(没有任何一个引用指向它,成了垃圾对象),
这种情况叫做组合,反之b所指向的对象还会有另外的引用指向它,这种情况叫聚合。
在实际写代码时组合方式一般会这样写:
A类的构造方法里创建B类的对象,也就是说,当A类的一个对象产生时,B类的对象随之产生,当A类的这个对象消亡时,它所包含的B类的对象也随之消亡。
聚合方式则是这样:
A类的对象在创建时不会立即创建B类的对象,而是等待一个外界的对象传给它
传给它的这个对象不是A类创建的。
现实生活中:
人和人和手,脚是组合关系,因为当人死亡后人的手也就不复存在了。人和他的电脑是聚合关系。

==26课时--这节课开始有难度

AOP就是动态代理的一种方式

动态代理:根本看不到代理类的名字,内部自己生成一段代码,动态编译这段代码,生成一个代理类。

动态编译3方式;JDK6 Complier API,开源的CGLib(底层用到ASM), ASM直接生成二进制(连编译器都不用了);

学生提到:不如写个类,动态代理是解决类太多的问题。

编译:System.getProperty("user.dir");会输出项目的根目录

后面出现一个问题,获取编译器获取不到。在Preferences中发现用了JRE环境(这个只是运行环境不包含编译环境)

==27课时

1、添加一个新的,并且是用JDK的,而不用公用的JRE。

2、到项目的 BuildPath中Libraries 将JRE System Libraries 删除, 添加Alternate JRE,就是第一步添加的jdk。

即可输出看到 编译器的类名,也可以拿到 SUN公司提供的编译器了。

如何使用:代码接着上方的截图。

利用JavaCompiler编译java文件(一个简单封装的工具类) - CSDN博客
http://blog.csdn.net/u014653197/article/details/52796006

使用JavaCompiler编译java源文件 - vDemo - 博客园
http://www.cnblogs.com/demo666666/p/4518137.html

Window - Show View- Navigator 可以真实反映硬盘的情况。

ClassLoader 可以加载bin中的.class文件。需要加载其他路径用URLClassLoader

2012年3月 随笔档案 - java_my_life - 博客园--此网友 12年的博客都是和模式有关的,希望可以多看看。
http://www.cnblogs.com/java-my-life/archive/2012/03.html

《JAVA与模式》之单例模式 - java_my_life - 博客园
http://www.cnblogs.com/java-my-life/archive/2012/03/31/2425631.html


第一部分 
第1章 模式的简史和形而上学
1.1模式是什么1. 2软件模式的简史1.3模式的起源1.4与道家思想的关系1. 5软件的永恒之道1. 6模式的要素1. 7本书讲解模式的格式
第2章 统一建模语言uml简介
2. 1建造世界贸易中心2.2什么是uml2. 3uml包括什么2.4类图2. 5时序图2. 6状态图2.7uml及建模的工具
第二部分
第3章 软件的可维护性与可复用性
3.1软件系统的可维护性

.
3. 2系统的可复用性3.3老子论“不武”
第4章 “开一闭”原则(ocp)
4.1什么是“开一闭”原则4. 2怎样做到“开一闭”原则4. 3与其他设计原则的关系4.4策略模式对“开一闭”原则的支持4. 5在其他设计模式中的体现4.6一个重构做法的讨论
第5章 专题:java语言的接口
5. 1什么是接口5.2为什么使用接口5.3java接口常见的用法
第6章 专题:抽象类
6.1什么是抽象类6.2抽象类的用途6.3基于抽象类的模式和原则6.4什么时候才应当使用继承复用
第7章 里氏代换原则( lsp)
7.1美猴王的智慧7.2什么是里氏代换原则7. 3里氏代换原则在设计模式中的体现7. 4墨子论“取譬”7.5从代码重构的角度理解
第8章 依赖倒转原则( dip)
8.1为何而“倒转”8.2复用与可维护性的“倒转”8. 3依赖倒转原则8.4怎样做到依赖倒转原则8.5java对抽象类型的支持8.6一个例子:账号、账号的种类和账号的状态8.7墨子论“取周”8.8依赖倒转原则的优缺点
第 9章 接口隔离原则( isp)
9. 1什么是接口隔离原则9. 2一个角色隔离原则的例子9.3定制服务的例子
第10章 合成
/聚合复用原则( carp)10.1合成和聚合的区别10. 2复用的基本种类10.3从代码重构的角度理解
第11章 迪米特法则( lod)
11.1迪米特法则的各种表述11.2狭义的迪米特法则11.3迪米特法则与设计模式11.4广义的迪米特法则11. 5广义迪米特法则在类的设计上的体现11. 6广义迪米特法则在代码层次上的实现11. 7老子论“圣人之治”
第三部分
第12章 简单工厂(simple factory)模式
12. 1工厂模式的几种形态12.2简单工厂模式的引进12.3简单工厂模式的结构12.4简单工厂模式的实现12.5简单工厂模式与其他模式的关系12.6简单工厂模式的优点和缺点12. 7简单工厂模式在此java中的应用12. 8女娲抟土造人
第13章 工厂方法( factory method)模式
13. 1引言13.2工厂方法模式的结构13.3工厂方法模式在农场系统中的实现13. 4关于工厂方法模式的实现13. 5java语言中工厂方法模式的例子13.6工厂方法模式与其他模式的关系13.7女蜗举绳造人13.8其他的例了
第14章 抽象工厂(
abstractfactory)模式14.1引言14.2问题14. 3抽象工厂模式的结构14. 4在什么情形下应当使用抽象工厂模式14. 5抽象工厂模式在农场系统中的实现14.6抽象工厂模式的另一个例子14.7“开一闭”原则14.8相关的模式与模式的实现14.9女娟造万物的故事14. 10附录:java awt的peer架构与抽象工厂模式
第15章 单例( singleton)模式
15. 1引言15.2单例模式的结构15.3在什么情况下使用单例模式15. 4单例类的状态15. 5一个实用的例子:属性管理器15.6java语言中的单例模式15.7专题:不完全的单例类15.8相关模式15.9附录:双重检查成例的研究15.10给读者的一点建议
第16章 专题:单例模式与mx记录
16. 1问题与解决方案16. 2目录服务与mx记录16. 3jndi架构介绍16.4如何使用jndi编程16.5系统设讨16.6讨论
第17章 专题:多例(multiton)模式与多语言支持
17.1引言17. 2多例模式17. 3多语言项目的设计
第18章 专题:序列键生成器与单例及多例模式
18. 1问题18.2将单例模式应用到系统设计中18.3将多例模式应用到系统设计中18.4讨论
第19章 建造(builder)模式
19.1引言19.2建造模式的结构19.3建造模式的活动序列19.4建造模式的实现19. 5众神造人的神话故事19.6javamail中的建造模式19. 7一个发送邮件的例子19.8在什么情况下使用建造模式19.9建造模式与其他模式的关系
第20章 原始模型(prototype)模式
20.1引言20.2变量、对象以及对象的引用20.3java对象的复制20.4原始模型模式的结构20.5模式的实现:深复制和浅复制20.6孙大圣的身外身法术20.7在什么情况下使用原始模型模式20.8原始模型模式的优点和缺点20. 9原始模型模式与其他模式的关系
第21章 专题:javabeean的“冷藏”和“解冻”
21.1什么是“冷藏”和“解冻”21.2什么可以“冷藏”21.3beaus.instantiate()方法21.4怎样在jsp中使用beaus.instantiate()方法21.5与装饰模式的关系
第四部分
第22章 适配器( adapter)模式
22.1引言22.2类的适配器模式的结构22.3类的适配器模式的效果22.4对象的适配器模式的结构22.5在什么情况下使用适配器模式22.6iterator与enumeration22.7利用适配器模式指方为圆22.8适配器模式在架构层次上的应用22.9关于模式实现的讨论22.10适配器模式与相关的模式
第23章 缺省适配(
defaultadapter)模式23.1鲁智深的故事23. 2windowadapter是缺省适配模式23.3模式的结构23.4在什么情况下使用本模式23.5模式的实现23.6j2se中的缺省适配模式23.7一个例子
第24章专题:xmlproperties与适配器模式
24.1引言24.2sax2浏览器24. 3开始xmlproperties项目
第25章 合成(composite)模式
25.1对象的树结构25.2介绍合成模式25.3安全式和透明式的合成模式25.4安全式的合成模式的结构25.5透明式的合成模式的结构25.6合成模式的实现25.7道士的故事25.8一个绘图的例子25. 9awt库中的例子25.10合成模式与其他模式的关系
第26章 装饰(decorator)模式
26.1引言26.2装饰模式的结构26.3装饰模式应当在什么情况下使用26.4孙大圣的故事26.5使用装饰模式的优点和缺点26.6模式实现的讨论26.7装饰模式与其他模式的关系26.8实例:grepreader26.9一个例子:发票系统26.10附录:关于适配器模式与装饰模式的对话
第27章 专题:设计模式在 java i
/o库中的应用27.1引言27.2java i/o库的设计原则27.3装饰模式的应用27.4半透明的装饰模式27.5适配器模式的应用27.6从byte流到char流的适配
第28章 代理(proxy)模式
28.1引言28.2代理的种类28. 3代理模式的结构28. 4代理模式的时序28. 5 jsvs 2.0对代理模式的支持28.6高老庄悟空降八戒28.7代理模式的优点和缺点28.8代理模式的实现28. 9代理模式与其他模式的关系
第29章 专题:智能引用代理
29.1问题29.2系统设计29.3系统的时序29.4系统的源代码
第30章 专题:虚拟代理的例子
30.1问题30.2系统的要求30.3系统的设计30.4系统的时序30.5系统的源代码
第31章 享元模式( flyweight pattern)
31.1引言31.2单纯享元模式的结构31.3复合享元模式的结构31. 4模式的实现31.5一个咖啡摊的例子31. 6咖啡屋的例于31.7享元模式应当在什么情况下使用31.8从代码重构的角度看享元模式31. 9享元模式的优点和缺点31.10相关的模式
第32章 门面(facade)模式
32.1引言32.2门面模式的结构32.3门面模式的实现32.4在什么情况下使用门面模式32.5迪米特法则(lod)32.6一个例子32.7使用门面模式的设计32.8session门面模式
第33章 桥梁(bridge)模式
33.1引言33.2桥梁模式的结构33.3java语言中的peer架构33.4驱动器和 jdbc驱动器33.5从重构的角度考察33.6桥梁模式和其他模式的关系33.7八戒“转世投胎”的故事33.8关于桥梁模式的实现33.9在什么情况下应当使用桥梁模式
第五部分
第34章 不变(immtable)模式
34.1引言34.2不变模式的结构和实现34.3不变模式在java语言中的应用34.4不变模式的优点和缺点34.5不变模式与事元模式的关系34.6一个例子:复数类
第35章 策略( strategy)模式
35.1引言35.2模式的实现35.3java语言内部的例子35.4排序策略系统35.5一个例子:图书折扣的计算35.6在什么情况下应当使用策略模式35. 7策略模式的优点和缺点35. 8策略模式与其他模式的关系35.9设计原则的讨论35. 10诸葛亮的锦囊妙计
第36章 模版方法(template method)模式
36. 1引言36.2模版方法模式的结构36.3“好莱坞原则”36. 4一个例于36. 5继承作为复用的工具36. 6java语言里面使用过的模版方法模式36. 7模版方法模式中的方法36. 8模版方法模式在代码重构中的应用36.9重构的原则36. 10西天取经的八十一难
第37章 专题:servlet技术中的模式
37. 1servlet技术介绍37. 2模版方法模式的使用37. 3观察者模式的应用
第38章 观察者(observer)模式
38. 1引言38. 2观察者模式的结构38. 3另一种实现方案38. 4java语言提供的对观察者模式的支持38. 5菩萨的守瓶龟38. 6java中的dem事件机制38. 7观察合模式与其他模式的关系
第39章 专题:观察者模式与awt中的事件处理
39. 1引言39. 2dem的结构
第40章 专题:观察者模式与sax2浏览器
40.1引言40.2sax2是怎么工作的40.3contenthandler接口40.4怎样实现 contenthandler接口40.5怎样使用 contenthandler40. 6缺省适配模式与defaulthandler40.7简单工厂模式的应用
第41章 专题:观察者模式与swing定时器
41.1为什么需要定时器41.2utility定时器与swing定时器的区别41.3使用swing定时器的方法41. 4观察者模式的应用41.5单例模式的应用
第42章 专题:mvc模式与用户输入数据检查
42.1什么是mvc模式42. 2mvc是架构模式42. 3mvc模式在j2ee技术中的应用42.4从代码重构的角度查看42.5用户输人检查与mvc模式42.6sql注射
第43章 迭代子(iterator)模式
43.1引言43.2迭代子模式的结构43.3迭代子模式的实现43.4迭代子模式的优点和缺点43.5一个例子43.6迭代子模式与其他模式的关系
第44章 专题:java对迭代子模式的支持
44. 1java聚集44.2java聚集中的迭代子44.3java.util.iterator接口44.4java迭代子接口日 listlterator44.5enumeration与iterator44.6其他相关模式
第45章 责任链( chain of responsibility)模式
45.1从击鼓传花谈起45.2责任链模式的结构45.3纯的与不纯的责任链模式45.4 jsvs 1.0版的awt事件处理机制45.5《红楼梦》中击鼓传花的故事45.6java系统的解45.7责任链模式的实现45.8对象的树结构45.9dhtml中的事件处理45.10责任链模式与其他模式的关系
第46章 专题:定时器与击鼓传花.
46.1线程46.2定时器46.3击鼓传花
第47章 命令( command)模式
47.1引言47.2命令模式的结构47.3玉帝传美猴王上天47.4java语言内的例子:awt的事件处理47.5一个例子:创世纪系统47.6一个例子:audioplayer系统47.7增加宏命令功能47.8模式的实现47.9在什么情况下应当使用命令模式47.10使用命令模式的优点和缺点47.11命令模式与其他模式的关系
第48章 专题:swing库中的命令撤销和恢复
48.1在视窗系统中使用命令模式48.2swing的基本撤销功能48.3一休论禅的文字框
第49章 备忘录( memento)模式
49.1备忘录模式的结构49.2备忘录模式的白箱实现49.3双重接口及其在java语言中的实现49.4备忘录模式的黑箱实现49.5负责人角色的增强49.6备忘录模式与多重检查点49.7“自述历史”模式49. 8“假如”协议模式49.9备忘录模式与其他模式的关系49.10备忘录模式的应用49.11使用备忘录模式的优点和缺点49. 12观世音甘泉活树的故事
第50章 状态( state)模式
50.1引言50.2状态模式的结构50.3曾侯乙编钟的描述50.4状态模式的效果50.5在什么情况下使用状态模式50.6关于模式实现的讨论50.7一个状态模式的应用例子:tcp50.8状态模式在绘图软件中的应用50.9用户登录子系统50.10状态模式与策略模式的区别
第51章 专题:峻山道士与状态模式
51.1有状态的墙51.2异常逻辑51.3从代码重构的角度考察
第52章 专题:单分派和多分派
52.1分派的概念52. 2双重分派52.3未来的java语言
第53章 访问者(visitor)模式
53.1引言53.2访问者模式的结构53.3系统的时序图53.4在什么情况下应当使用访问者模式53.5使用访问者模式的优点和缺点53.6访问者模式的实现53.7电脑专卖系统:问题与对象53.8电脑专卖系统的访问者模式设计53.9与访问者模式有关的模式
第54章 解释器(interpreter)模式
54.1引言54.2解释器模式的结构54.3一个示意性的实现54.4有关模式
第55章 调停者(mediator)模式
55.1引言55.2调停者模式的结构55.3调停者模式的实现55.4迪米特法则(lod)55.5调停者模式的优点和缺点55.6调停者模式的使用条件55.7与调停者模式有关的模式
附录a 设计模式一览表
a.
1创建模式
a.
2结构模式
a.
3行为模式
附录b uml图标及其java实现一览表
附录c 中英术语对照表

书本目录

需求:
实现 iframe 的自适应高度,能够随着页面的长度自动的适应以免除页面和 iframe 同时出现滚动条的现象。 (需要只有iframe出现滚动条)

本人一开始这么写:会造成只有主页面加载是设定一次。但是窗体变小或变大后不会触发。

 $(functionsetIframeHeight() {var iframe ;//高度初始化600,为了14寸笔记本
        iframe =document.getElementById('mainiframe');
iframe.height
=document.getElementById("sidebar").offsetHeight-56;//if (iframe) {//var iframeWin = iframe.contentWindow || iframe.contentDocument.parentWindow;//if (iframeWin.document.body) {//iframe.height = iframeWin.document.documentElement.scrollHeight || iframeWin.document.body.scrollHeight;//}//} })

转:
真正的让iframe自适应高度 兼容多种浏览器随着窗口大小改变 - CSDN博客--摘录在下方
http://blog.csdn.net/alex8046/article/details/51456131

今天有朋友问到我关于“iframe自适应高度”的问题,原本以为是很简单的问题,没想到折腾了20分钟才搞定。期间遇到几个问题,要么是高度自适应了,但是当窗口改变时会出现滚动条。也就是当窗口放大时iframe没有自动跟随变大显得很小,或是当窗口缩小时iframe还是之前那么大就出现了滚动条。还有或是高度不准确,那么就达不到想要的效果了。

为什么需要使用iframe自适应高度呢?其实就是为了美观,要不然iframe和窗口长短大小不一,看起来总是不那么舒服,特别是对于我们这些编程的来说,如鲠在喉的感觉。

首先设置样式

body{margin:0; padding:0;}

如果不设置body的margin和padding为0的话,页面上下左右会出现空白。

html代码如下

<iframe src="http://www.fulibac.com" id="myiframe" scrolling="no" frameborder="0"></iframe>

下面就是今天小编写的时候遇到的问题,考虑到有些朋友可能没怎么用jquery就直接用js吧。


方法一

var ifm= document.getElementById("myiframe");

ifm.height=document.documentElement.clientHeight;

这个方法可以达到让iframe自适应高度的效果,但是如果你将窗口放大或缩小效果就不出来了,也就是本文开头讲的。需要再次刷新,那就不属于自适应了。

那么问题来了,需要解决当窗口改变大小的时候执行js事件,以让iframe自适就高度。那么就需要将相关的代码写成函数,并且给iframe加上onLoad="changeFrameHeight()",也就是下面的方法二了。


方法二

<iframe src="http://www.fulibac.com" id="myiframe" scrolling="no" onload="changeFrameHeight()" frameborder="0"></iframe>

js代码也得跟着改

function changeFrameHeight(){
var ifm= document.getElementById("iframepage");
ifm.height=document.documentElement.clientHeight;

}

window.onresize=function(){
changeFrameHeight();

}

window.onresize的作用就是当窗口大小改变的时候会触发这个事件。

所以,使用方法二就可以完美的、真正的让iframe自适应高度了,试试看吧,并且兼容多种浏览器。

==上面摘录结束

====本人修改为:(方法1)

<iframeid="mainiframe"width="100%"height="600"src="/dsdd/confirm/"onload="changeFrameHeight()"frameborder="0"scrolling="auto"></iframe>
    functionchangeFrameHeight(){var ifm= document.getElementById("mainiframe");
ifm.height
=document.documentElement.clientHeight-56; //56是头顶的高度,和网友估计不一样。
}
$(
function(){ window.onresize=function(){
changeFrameHeight(); }}); //这里不知道是否还要 $(function(){}) 这个闭包吗?后证实不需要

但要保留  window.onresize=function(){ changeFrameHeight();}

==本人 方法2  html去掉每次iframe onload都触发计算高度,更妙 ;推荐

 <iframeid="mainiframe"width="100%"height="600"src="/dsdd/confirm/"frameborder="0"scrolling="auto"></iframe>
  functionchangeFrameHeight(){var ifm= document.getElementById("mainiframe");
ifm.height
=document.documentElement.clientHeight-56;
}
window.onresize
=function(){ changeFrameHeight();}
$(
function(){changeFrameHeight();});

特别声明:
changeFrameHeight() 方法里面的计算高度要结合你的布局,并不是网上都合适你的。并且这个只有一个iframe

比如:下面的里面有很多方法,有点头晕。^_^

关于iframe自适应高度的方法总结 - CSDN博客
http://blog.csdn.net/hj7jay/article/details/51675692

开始:看名字都带有ClassLoader,叫做
类加载器
,事实上是可以理解为动态的加载类,不过,也不是只能加载类,也可以加载其他形式的文件,比如说.properties属性文件。

区别:其实在两个类加载器有一点小区别,就在于能够加载的类存放的位置,从JDK源码上来看其实是URLClassLoader继承了ClassLoader,也就是说URLClassLoader把ClassLoader扩展了一下,所以可以理解成URLClassLoader功能要多点。

ClassLoader只能加载classpath下面的类,而URLClassLoader可以加载任意路径下的类
。他们的继承关系如下:

public class URLClassLoader extends SecureClassLoader {}
public class SecureClassLoader extends ClassLoader {}

URLClassLoader是在java.net包下的一个类。一般动态加载类都是直接用Class.forName()这个方法,但这个方法只能创建程序中已经引用的类,并且只能用包名的方法进行索引,比如Java.lang.String,不能对一个.class文件或者一个不在程序引用里的.jar包中的类进行创建。
URLClassLoader提供了这个功能,它让我们可以通过以下几种方式进行加载:
* 文件: (从文件系统目录加载)
* jar包: (从Jar包进行加载)
* Http: (从远程的Http服务进行加载)

当class文件或者resources资源文件更新后,我们需要重新加载这些类或者Jar。从理论上来说,当应用清理了对所加载的对象的引用,那么垃圾收集器就会将这些对象给收集掉,然后我们再重新加载新的JAR文件,并创建一个新的URLClassLoader来加载。可是这里有一个问题,就是我们不知道垃圾收集器什么时候将那些未被引用的对象给收集掉,特别是在Windows中,因为在Windows中打开的文件是不可以被删除或被替换的。

在Java7的Build 48版中,URLClassLoader提供了close()这个方法,可以将打开的资源全部释放掉,这个给开发者节省了大量的时间来精力来处理这方面的问题。

URL url = new URL("file:foo.jar");
URLClassLoader loader
= new URLClassLoader (newURL[] {url});
Class cl
= Class.forName ("Foo", true, loader);
Runnable foo
=(Runnable) cl.newInstance();
foo.run();
loader.close ();
//foo.jar gets updated somehow loader = new URLClassLoader (newURL[] {url});
cl
= Class.forName ("Foo", true, loader);
foo
=(Runnable) cl.newInstance();//run the new implementation of Foo foo.run();

=====网友

ClassLoader 与 URLClassLoader 的用法 - CSDN博客
http://blog.csdn.net/a454832841/article/details/38661635

ClassLoader工作机制 - 温布利往事 - 博客园--貌似很不错图文并茂
http://www.cnblogs.com/xujian2014/p/6666661153.html