亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

Java應用的動態擴展

2019-11-18 13:28:15
字體:
來源:轉載
供稿:網友

  這里所謂的可擴展應用,是指這樣的編程語言或者系統,它可以在不修改現有系統整體或任意一部分功能的情況下,擴展自身的功能。對于傳統的編程語言,比如Cobol、C、C++,假如要為它們的應用增加新功能,程序員必須重新編輯、編譯和發布程序,因為這些語言都是靜態鏈接的語言,不具備動態添加功能的機制(也就是說,生成執行代碼的時候,所有的程序代碼必須事先預備妥當)。java應用的可擴展能力突破了這些限制。
  
  Java應用的可擴展功能包含了答應動態地定義新的數據類型以及答應用戶插入自己的程序例程的能力。這一切是如何實現的呢?下面我們通過實例來了解具體的實現過程。
  
  普通應用的擴展
  
  在Java中,擴展性源于繼續,具體手段或者是擴展一個類,或者是實現一個接口。Java接口的主要用途就在于此。(Java接口定義了一組方法,但不包含實現。實現某個接口的類必須實現該接口定義的所有方法,因而也就遵循某種確定的行為模式。)
  
  為什么說這個功能對于普通程序來說也很重要呢?假如一個程序是可以動態擴展的,用戶就不必再為了添加新功能而去修改源程序。這就避免了搞亂原有的代碼,使得用戶能夠專注于自己的那一部分代碼。此外,程序不必為了引入新功能而重新啟動,這對于那些需要不間斷運行的程序來說無疑是一個福音。
  
  為進一步了解Java程序的動態擴展技術,我們來看一個例子。一家快速增長的保險公司想要用計算機治理它的報價系統。這家公司現有兩個產品:人壽保險(lifecare)和醫療保險(medicare)。根據保額、期限、客戶年齡和保險產品的不同,月保險費用的計算方法也不同。系統應該能夠在不修改原有代碼的情況下,引入保險公司推出的其他產品。為現有產品設計的類模型如圖一所示。
   Java應用的動態擴展(圖一)
  當一個客戶試圖獲取某種保險產品的報價時,系統創建一個對應該產品類型的對象,調用該對象的calculatePRemium()方法,根據指定產品的計算方法計算出保險費用。系統利用一個xml文件(或屬性文件)描述現有產品信息,比如保險產品的名稱和相應的類名稱。XML文件如Listing 1所示。
  
  【Listing 1:描述產品信息的XML文件】
   Java應用的動態擴展(圖二)
  系統從XML文件讀取指定產品的類的全稱,動態地創建對象。然后,系統調用calculatePremium(),根據指定的保額、期限和客戶年齡,按照特定產品的計算邏輯計算出精確的保險費。
  現在我們來看看系統如何動態地裝入對象。在把類裝入內存和創建特定產品類型的對象時,系統用到了Java類庫java.lang.Class。Class類的實例或者代表著Java應用中的一個類,或者代表著一個接口。在后臺,Java虛擬機(JVM)經常利用Class類操作Java類;然而,用戶程序也同樣可以通過Class類的實例操作Java類。請參見Listing 2的Class類摘要。
  
  【Listing 2:Class類概要】
  
  public final class java.lang.Class extends
  
  java.lang.Object
  
  {
  
  public static Class forName(String className)
  
  public static Class forName(
  
  String name, boolean initialize, ClassLoader loader)
  
  public Class[] getClasses()
  
  public ClassLoader getClassLoader()
  
  public Class getComponentType()
  
  public ConstrUCtor getConstructor(Class[] parameterTypes)
  
  public Constructor[] getConstructors()
  
  public Class[] getDeclaredClasses()
  
  public Constructor getDeclaredConstructor(
  
  Class[] parameterTypes)
  
  public Constructor[] getDeclaredConstructors()
  
  public Field getDeclaredField(String name)
  
  public Field[] getDeclaredFields()
  
  
  public Method getDeclaredMethod(String name, Class[],
  
  parameterTypes)
  
  public Method[] getDeclaredMethods()
  
  public Class getDeclaringClass()
  
  public Field getField(String name)
  
  public Field[] getFields()
  
  public Class[] getInterfaces()
  
  public Method getMethod(
  
  String name, Class[] parameterTypes)
  
  public Method[] getMethods()
  
  public int getModifiers()
  
  public String getName()
  
  public Package getPackage()
  
  public ProtectionDomain getProtectionDomain()
  
  public URL getResource(String name)
  
  public InputStream getResourceAsStream(String name)
  
  public Object[] getSigners()
  
  public Class getSuperclass()
  
  public boolean isArray()
  
  public boolean isAssignableFrom(Class cls)
  
  public boolean isInstance(Object obj)
  
  public boolean isInterface()
  
  public boolean isPrimitive()
  
  public Object newInstance()
  
  public String toString()
  
  }
  在這里,我們感愛好的主要是forName()方法和newInstance()方法。靜態方法forName()返回和指定類名字關聯的Class對象。它通過類裝入器把類裝入到執行程序。類名字參數可以是classpath中存在的任意一個類。假如不能找到指定類,則forName()方法拋出ClassNotFoundException異常。newInstance()方法為Class對象代表的類新建一個實例。newInstance()方法也利用類的不帶參數的構造函數創建新對象,因此該類必須有一個不帶參數的構造函數。假如newInstance()方法由于任何原因不能實例化一個類,它將拋出InstantiationException異常;假如不能訪問該類或它的構造函數,則拋出IllegalaccessException異常。Listing 3顯示了Product接口和它的實現:MediCare,LifeCare。
  
  【Listing 3:Product接口及其實現】
  
  
  // Product.java
  
  // Product接口
  
  package com.test.dynamic;
  
  
  public interface Product
  
  {
  
  public float calculatePremium(
  
  float face-value,int term, int age);
  
  }
  
  
  // MediCare.java
  
  // Product的一個實現
  
  package com.test.dynamic;
  
  
  public class MediCare implements Product
  
  {
  
  public float calculatePremium(
  
  float face-value, int term , int age)
  
  {
  
  float premium;
  
  // 計算保險費
  
  // ......
  
  return premium;
  
  }
  
  }
  
  
  // LifeCare.java
  
  // Product的一個實現
  
  package com.test.dynamic;
  
  
  public class LifeCare implements Product
  
  {
  
  public float calculatePremium(
  
  float face-value, int term , int age)
  
  {
  
  float premium;
  
  // 計算保險費(不同的保險產品,計算方法不同)
  
  // .......
  
  return premium;
  
  }
  
  }
  當用戶詢問報價時,報價系統根據保險產品的名字裝入并實例化產品類。下面我們用兩個方法實現裝入和調用代碼。GetProductFromName根據指定的產品名字生成合適的產品對象,makeQuote()方法計算保險費。Listing 4顯示了它們的代碼:
  
  【Listing 4:生成產品對象,計算保險費】
  
  public Object GetProductFromName(String productName)
  
  {
  
  // 待裝入對象的類名稱
  
  String className = null;
  
  // 利用XML分析庫org.xml.sax,
  
  // 從XML文件獲取產品的相應類名稱
  
  // ......
  
  
  // 假定類名字對應正確的產品,例如
  
  // "Com.test.dynamic.MediCare"
  
  try
  
  {
  
  Object o = null;
  
  o = Class.forName(className).newInstance();
  
  }
  
  //catch(ClassNotFoundException e){}
  
  //catch(InstantiationException e){}
  
  //catch(IllegalAccessException e){}
  
  catch( Exception e )
  
  {
  
  e.printStackTrace();
  
  }
  
  return o;
  
  }
  
  // makeQuote方法無返回值
  
  public void makeQuote()
  
  {
  
  String productName;
  
  float faceValue , premium ;
  
  int faceValue, age;
  
  
  // 從應用的用戶界面獲取所有參數,包括
  
  // 產品名稱、期限、保額、年齡
  
  // (有效的產品可以

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久99亚洲热视| 精品久久久久久久久久久久久| 欧美精品久久一区二区| 高清一区二区三区四区五区| 久久香蕉频线观| 大伊人狠狠躁夜夜躁av一区| 亚洲aa在线观看| 91九色单男在线观看| 1769国内精品视频在线播放| 日韩欧美有码在线| 51久久精品夜色国产麻豆| 一级做a爰片久久毛片美女图片| 国产成人亚洲精品| 亚洲免费影视第一页| 色诱女教师一区二区三区| 国外成人免费在线播放| 日韩在线视频免费观看高清中文| 情事1991在线| 国产精品女主播| 亚洲欧洲在线看| 麻豆成人在线看| 成人有码视频在线播放| 亚洲一区亚洲二区亚洲三区| 欧美国产亚洲精品久久久8v| 亚洲精品xxxx| 成人网中文字幕| 亚洲精品免费在线视频| 日韩美女视频在线观看| 亚洲美女av电影| 亚洲无线码在线一区观看| 亚洲爱爱爱爱爱| 亚洲欧美另类人妖| 久99九色视频在线观看| 精品色蜜蜜精品视频在线观看| 亚洲午夜av久久乱码| 自拍偷拍亚洲一区| 成人两性免费视频| 久久精品电影网| 国产+人+亚洲| 日韩亚洲欧美中文在线| 亚洲精品720p| 97在线视频一区| 日本精品久久久久久久| 欧美精品久久久久久久久| 欧美日韩亚洲一区二区| 9.1国产丝袜在线观看| 午夜精品99久久免费| 欧美日韩色婷婷| 欧美亚洲一级片| 欧美激情三级免费| 国产欧美精品日韩| 81精品国产乱码久久久久久| 国产伦精品一区二区三区精品视频| 69视频在线免费观看| 亚洲日本欧美中文幕| 这里只有精品在线播放| 日韩**中文字幕毛片| 久久久久久一区二区三区| 国产精品揄拍一区二区| 日韩美女毛茸茸| 国产精品羞羞答答| 久久久精品免费| 亚洲最新av网址| 亚洲综合视频1区| 亚洲美女自拍视频| 国产a∨精品一区二区三区不卡| 国产成一区二区| 岛国av一区二区在线在线观看| 国产精品久久久久久久久久久新郎| 亚洲在线视频福利| 亚洲国产成人91精品| 精品人伦一区二区三区蜜桃免费| 久热精品视频在线观看| 欧美日韩激情美女| 国产69精品久久久久99| 欧美资源在线观看| 欧美极品少妇xxxxⅹ免费视频| 国产精品高潮呻吟久久av黑人| 动漫精品一区二区| 国产精品一久久香蕉国产线看观看| 欧美性xxxxx极品娇小| 欧美裸体xxxx极品少妇软件| 伊人成人开心激情综合网| 亚洲老司机av| 亚洲人成亚洲人成在线观看| 国产欧美精品一区二区三区-老狼| 亚洲最新视频在线| 亚洲一区精品电影| 欧美在线影院在线视频| 色视频www在线播放国产成人| yellow中文字幕久久| 亚洲精品自拍偷拍| 韩剧1988在线观看免费完整版| 久久久噜噜噜久噜久久| 另类图片亚洲另类| 国产免费亚洲高清| 国产精品视频播放| 久久亚洲国产成人| 日韩中文字幕网| 欧美大尺度在线观看| 色妞久久福利网| 搡老女人一区二区三区视频tv| 久久亚洲私人国产精品va| 91麻豆国产精品| 国产成人短视频| 国产一区二区三区在线播放免费观看| 日韩精品久久久久久久玫瑰园| 久久九九有精品国产23| 久久久成人的性感天堂| 中文字幕亚洲一区在线观看| 国产一区二区免费| 久久久精品欧美| 国产丝袜精品第一页| 亚洲一级免费视频| 久久久亚洲影院你懂的| 欧美亚洲另类制服自拍| 欧美亚洲国产视频小说| 亚洲国产日韩欧美在线99| 精品夜色国产国偷在线| 亚洲色图综合网| 欧美精品激情在线观看| 日韩经典一区二区三区| 成人黄色免费看| 欧美福利视频在线观看| 中文字幕国产精品| 欧美一区二区视频97| 国产精品久久久久高潮| 久久久久久91香蕉国产| 国产亚洲一区二区在线| 黄色成人av网| 日韩av毛片网| 国产一区二区三区三区在线观看| 亚洲欧美综合另类中字| 亚洲午夜av电影| 亚洲午夜未满十八勿入免费观看全集| 日韩视频在线一区| 欧美午夜精品久久久久久久| 久久久久久久久久婷婷| 久久久久在线观看| 亚洲欧美日韩中文视频| 日韩成人在线电影网| 精品福利免费观看| 久久精品中文字幕| 7m精品福利视频导航| 亚洲成av人片在线观看香蕉| 三级精品视频久久久久| 91久久精品一区| 91在线视频免费| 亚洲欧洲国产伦综合| 成人国产精品久久久| 北条麻妃在线一区二区| 国产欧美精品日韩精品| 亚洲成人精品视频在线观看| 国产精品高清免费在线观看| 日韩暖暖在线视频| 欧美一区二区三区免费观看| 成人情趣片在线观看免费| 在线视频国产日韩| 欧美视频在线观看免费网址| 国产精品第三页| 欧美日韩亚洲精品一区二区三区| 亚洲欧洲日产国产网站| 国产午夜精品理论片a级探花| 欧洲精品毛片网站|