国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

對于加載器的理解 黑馬程序員

2019-11-14 23:15:53
字體:
來源:轉載
供稿:網友
對于加載器的理解 黑馬程序員
---------------------- <a >asp.net+Unity開發</a>、<a >.Net培訓</a>、期待與您交流! ----------------------public class Example implements IExample {  PRivate int counter;  public String message() {    return "Version 1";  }  public int plusPlus() {    return counter++;  }  public int counter() {    return counter;  }}我們使用無限循環并打印出Example類信息的的main()方法。我們同樣需要Example類的兩個實例:example1在開始的時候創建一次,example2在每一次循環都重新創建:public class Main {  private static IExample example1;  private static IExample example2;    public static void main(String[] args)  {    example1 = ExampleFactory.newInstance();      while (true) {      example2 = ExampleFactory.newInstance();        System.out.println("1) " +        example1.message() + " = " + example1.plusPlus());      System.out.println("2) " +        example2.message() + " = " + example2.plusPlus());      System.out.println();        Thread.currentThread().sleep(3000);    }  }}IExample是一個擁有Example所有方法的接口。這是必須的,因為我們通過另外一個隔離的類加載器加載Example,所以Main不能直接使用它(否則會有ClassCastException)。public interface IExample {  String message();  int plusPlus();}   如果去掉異常處理代碼,精簡后的代碼如下:public class ExampleFactory {  public static IExample newInstance() {    URLClassLoader tmp =      new URLClassLoader(new URL[] {getClassPath()}) {        public Class loadClass(String name) {          if ("example.Example".equals(name))            return findClass(name);          return super.loadClass(name);        }      };      return (IExample)      tmp.loadClass("example.Example").newInstance();  }}由于例子需要,方法getClassPath()可以返回一個固定的類路徑(hardcoded classpath)。然而,在完整的代碼中(參見后面的資源章節),你可以看到我們怎么使用ClassLoader.getResource()來做到自動適配的。現在讓我們來執行Main.main,在幾個循環后,我們可以看到輸出:121) Version 1 = 32) Version 1 = 0如我們所期望的,雖然第一個實例的counter被更新了,但第二個還是維持為”0″。如果我們修改Exampler.message()方法,使它返回”Version 2″。輸出如下:121) Version 1 = 42) Version 2 = 0    我們看到,第一個實例繼續增加counter,但使用舊版本的類來輸出版本信息。而第二個實例已經被更新,但所有的狀態都已經丟失了。為了改進這個,我們嘗試為第二個實例重新構造狀態。我們只需從前一個迭代中復制它即可。首先我們為Example類添加一個新的copy方法(和對象的接口方法):public IExample copy(IExample example) {  if (example != null)    counter = example.counter();  return this;}接著我們更新Main.main()方法中創建第二個對象的那行代碼:1example2 = ExampleFactory.newInstance().copy(example2);等幾個迭代后可以看到:121) Version 1 = 32) Version 1 = 3修改Example.message()方法使它返回”Version 2″輸出:121) Version 1 = 42) Version 2 = 4---------------------- <a >ASP.Net+Unity開發</a>、<a >.Net培訓</a>、期待與您交流! ----------------------


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 璧山县| 博湖县| 南漳县| 乌拉特后旗| 新巴尔虎左旗| 金沙县| 苏尼特右旗| 同仁县| 垫江县| 商洛市| 织金县| 湟源县| 博湖县| 金塔县| 古浪县| 教育| 清镇市| 息烽县| 类乌齐县| 宽城| 佛学| 屏边| 重庆市| 格尔木市| 雷波县| 彩票| 大石桥市| 孝义市| 资兴市| 哈密市| 大竹县| 乌鲁木齐市| 枣阳市| 阿拉善左旗| 东乌珠穆沁旗| 鞍山市| 云梦县| 祁阳县| 布拖县| 阜平县| 明水县|