哪吒2之魔童闹海|哪吒2之魔童归来免费观看|哪吒2在线观看|哪吒2魔童闹海电影免费观看|哪吒2免费观看完整版大电影|哪吒1免费观看完整版

新疆軟件開發(fā)

本站首頁 軟件開發(fā) 成功案例 公司新聞 公司簡介 客服中心 軟件技術(shù) 網(wǎng)站建設(shè)
  您現(xiàn)在的位置: 新疆二域軟件開發(fā)公司 >> Java技術(shù) >> 文章正文

如何在類被實例化之前動態(tài)靜態(tài)常量

被動態(tài)改變的類如下:
public class ScrollImage implements Face {

private static String TEST = "TEST";

public static void change(String change){
TEST=change;
}
public void myFace(String describe) {
}

/**
* Constructor for ScrollImage.
*/
public ScrollImage() {
super();
System.out.println(":))"+TEST);
show();
}
...
注意 通常使用new ScrollImage()時會輸出::))TEST
我的目的要通過類加載來改變它的輸出,實際上是改變了靜態(tài)常量的值,也相當(dāng)于改變了任何一個實例對該常量的引用值。

先判斷該類是否為我們需要動態(tài)改變的類
Class cImage;
Object oImage;
MyLoader loader = new MyLoader();

cImage =
loader.load("ScrollImage.class", "cn.com.efly.swt.ScrollImage");
if (Face.class.isAssignableFrom(cImage))
System.out.println(":):)");

改變它:
String arg = "changed";
/**也可以通過直接訪問常量來改變它,但是要修改常量的可見為public
*My ClassLoader:
*public class MyLoader extends ClassLoader {
*    static int maxsize = 10000;
*    public Class load(String namefile, String classname)
*        throws java.lang.Exception {
*        try {
*            //進(jìn)行判斷這個class是否已經(jīng)調(diào)入,已經(jīng)有就直接返回,不然就調(diào)入
*            Class ctmp = this.findLoadedClass(classname);
*            System.out.println(ctmp.getName() + " is load");
*            return ctmp;
*        } catch (Exception e) {
*            //System.out.println(e);
*        }
*        java.io.FileInputStream in = new java.io.FileInputStream(namefile);
*        byte[] classbyte = new byte[maxsize];
*        //實際應(yīng)用時完全可以對一個文件進(jìn)行加解密處理,只要保證使用*defineClass時classbyte中
*        //已經(jīng)解密后的內(nèi)容就可以
*        int readsize;
*        readsize = in.read(classbyte);
*        // System.out.println("讀文件長:"+readsize);
*        in.close();
*        return defineClass(classname, classbyte, 0, readsize);
*    }
*}
*/
//cImage.getField("TEST").set(null,"Changed");
java.lang.reflect.Method change =
cImage.getMethod("change", new Class[] { String.class });
change.invoke(change, new Object[] { arg });
實例化該類,可以看到結(jié)果:
oImage = cImage.newInstance();
結(jié)果輸出:
:):)
:))changed

總結(jié):改方法可以用來解決一些特殊情況下遇到的問題,但是我不鼓勵大家使用。在我新的設(shè)計中已經(jīng)不考慮使用改方法,它對結(jié)構(gòu)沒有任何好處。

作者:efly | 文章來源:賽迪網(wǎng) | 更新時間:2007-12-15 16:45:10

  • 上一篇文章:

  • 下一篇文章:

  • 相關(guān)文章:
    C++類的友元成員
    軟件技術(shù)
    · 開發(fā)語言
    · Java技術(shù)
    · .Net技術(shù)
    · 數(shù)據(jù)庫開發(fā)
    最新文章  
    ·j2se 嵌入式腳本抓取引擎
    ·JAVA開發(fā)的6個實踐的例子
    ·JBuilder7 / Weblogic7開發(fā)
    ·JAVA中的抽象類型的一些概
    ·java語言開發(fā)程序中的幾個
    ·了解java開發(fā)語言在軟件開
    ·如何才能使用Java實現(xiàn)內(nèi)部
    ·Java開發(fā)學(xué)習(xí)小心使用Date
    ·Java程序員應(yīng)該了解那些開
    ·java性能優(yōu)化的一些見解
    ·介紹JDK5.0一些collection
    ·基礎(chǔ)學(xué)習(xí):java中使用存儲
    ·解析c#語言和java語言最相
    ·Java語言學(xué)習(xí):jAVA中 的多
    ·Java是不是應(yīng)該增加新特性
    關(guān)于我們 | 軟件開發(fā) | 下載試用 | 客服中心 | 聯(lián)系我們 | 友情鏈接 | 網(wǎng)站地圖 | 新疆電子地圖 | RSS訂閱
    版權(quán)所有 © 2016 新疆二域軟件開發(fā)網(wǎng) www.pg11qqq.com All Rights Reserved 新ICP備14003571號
    新疆軟件開發(fā)總機(jī):0991-4842803、4811639.
    客服QQ:596589785 ;地址:新疆烏魯木齊北京中路華聯(lián)大廈A-5C 郵編:830000
     
    永吉县| 长阳| 蛟河市| 临泉县| 榆中县| 铜山县| 米泉市| 苗栗市| 瓦房店市| 新宾| 姚安县| 海阳市| 洛扎县| 盐亭县| 临颍县| 红原县| 滁州市| 宜昌市| 兖州市| 台江县| 佛冈县| 玉树县| 集贤县| 灵山县| 平山县| 新宾| 姚安县| 石嘴山市| 河北省| 丰顺县| 株洲市| 星座| 澄城县| 奉新县| 双流县| 亳州市| 二手房| 南木林县| 田阳县| 平度市| 霸州市|