<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    在JAVA中動態執行類的靜態方法

    Posted on 2006-09-16 18:38 無為 閱讀(190) 評論(0)  編輯  收藏 所屬分類: Java/J2EE
    ??? 在JAVA中,通過Class.forName()方法可以動態決定加載哪一個類,這個功能對于相同接口的不同實現來講非常有用。比如對于設計好的數據庫連接池接口,我們可以有多種的接口實現類來完成相同的功能,同時用戶可以簡單的通過修改配置文件來指定實際使用哪一個實現類,在源代碼里面通過讀取配置文件信息,并用Class.forName(configClassName).getInstance()就可以構造一個特定的實現類實例,而不用每次修改源代碼。這樣對于程序來講只用關心接口的定義,用戶只用進行配置文件的設置就完成了同一功能的不同實現的切換。
    但是如果實現類需要通過靜態方法來進行初始化的時候,動態加載的過程就會復雜一些。同樣的以數據庫連接池為例,通常連接池的構造函數都會被定義為私有的,而通過自定義的getInstance()靜態方法來得到唯一實例。這種情況下簡單的通過Class.forName().getInstance()就無法正確構造實例。
    幸好JAVA所提供的反射機制(Reflection)為我們提供了完整了探悉類內部結構的方法。通過反射機制,我們能夠完成基本上所有的運行時決定的動作(雖然這一實現要比其他動態語言,比如PHP,的eval()的使用要復雜的多)。

    下面通過實際的例子說明如何在運行時動態訪問類的靜態方法。
    -------------------------------------------------------
    */

    import java.lang.reflect. * ;

    public class myTestClass{
    ????privatestatic Object pLock =new Object();

    ????privatestatic myTestClass p_instance =null;
    ????private String s_configName ="";
    ????privateboolean b_isFromResource =true;

    ????publicstatic
    Object getInstance(String sConfigName,
    ????????????????????????????????????????Boolean bIsFromResource){

    ????????synchronized(pLock){
    ????????????if(null==
    p_instance){
    ????????????????p_instance
    =
    ????????????????????new
    myTestClass(sConfigName,bIsFromResource);
    ????????????}
    ????????}

    ????????return
    p_instance;
    ????}


    ????private
    myTestClass(String sConfigName,Boolean bIsFromResource){
    ????????s_configName
    =
    sConfigName;
    ????????b_isFromResource
    =
    bIsFromResource.booleanValue();
    ????}


    ????publicvoid
    echoInfo(){
    ????????System.out.println(
    " current arguments : configName=[ " +

    ????????????????????????????s_configName
    + " ],isFromResource=[ " +
    ????????????????????????????b_isFromResource
    + " ] " );
    ????}


    ????publicstaticvoid main(String[] args) throws Exception{
    ????????// 設置方法的傳入參數的類型.
    ??????? Class[] parameterTypes =new
    Class[]{
    ????????????????????????????????????java.lang.String.
    class
    ,
    ????????????????????????????????????java.lang.Boolean.
    class

    ????????????????????????????????????};

    ????????Method mGetInstance
    = null ;
    ????????String className
    = " myTestClass "
    ;

    ????????Class curTestClass
    = Class.forName(className);
    ????????try
    {
    ????????????mGetInstance
    =
    curTestClass.
    ????????????????????????????getMethod(
    " getInstance "
    ,parameterTypes);
    ????????}

    ????????catch
    (NoSuchMethodException e){
    ????????????e.printStackTrace();
    ????????????mGetInstance
    = null
    ;
    ????????}


    ????????if(mGetInstance !=null
    ){

    ????????????myTestClass pObj
    =
    (myTestClass)
    ????????????????????????????????mGetInstance.invoke(

    ????????????????????????????????????null,
    ????????????????????????????????????new Object[]{
    ????????????????????????????????????????"src/myconfig.properties"
    ,
    ????????????????????????????????????????Boolean.FALSE
    ????????????????????????????????????}
    ????????????????????????????????);

    ????????????pObj.echoInfo();
    ????????}

    ????????else{
    ????????????throw
    ????????????new Exception("myTest Init Failed from class"+

    ????????????????????????????????className
    +
    ????????????????????????????????System.getProperty(
    " line.seperator " , " \n " ) +
    ????????????????????????????????"method getInstance(String, Boolean) exists."
    );
    ????????}
    ????}
    }
    ??


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    posts - 10, comments - 0, trackbacks - 0, articles - 3

    Copyright © 無為

    主站蜘蛛池模板: 亚洲嫩草影院在线观看| 羞羞漫画页面免费入口欢迎你| 91热成人精品国产免费| 亚洲精品动漫免费二区| 亚洲精品亚洲人成在线观看下载| 免费在线看黄的网站| 亚洲日本在线电影| 亚洲中文字幕久久精品无码APP| 18禁美女黄网站色大片免费观看| 亚洲色成人WWW永久在线观看| 狠狠色婷婷狠狠狠亚洲综合| 91免费播放人人爽人人快乐| 日本永久免费a∨在线视频| 亚洲老熟女@TubeumTV| 免费A级毛片无码A| 免费无码成人AV在线播放不卡| 亚洲国产成人无码AV在线 | 免费人成激情视频| 最近中文字幕免费完整 | 国产片AV片永久免费观看| 一级午夜免费视频| 亚洲AV成人影视在线观看| 亚洲精品无码午夜福利中文字幕| 免费观看男人免费桶女人视频 | 2021久久精品免费观看| 中文字幕的电影免费网站| 亚洲乱色熟女一区二区三区蜜臀| 亚洲AV无码不卡无码| 又粗又黄又猛又爽大片免费| 久久笫一福利免费导航| 国产情侣久久久久aⅴ免费| 国产尤物在线视精品在亚洲| 亚洲AV成人无码天堂| 久久精品国产亚洲| 亚洲美女高清一区二区三区 | a级毛片毛片免费观看久潮| 国产精品亚洲综合| 亚洲字幕AV一区二区三区四区| 亚洲小视频在线观看| 亚洲精品无码MV在线观看| 亚洲国产小视频精品久久久三级 |