新疆软件开发

本站首页 软件开发 成功案例 公司新闻 公司简介 客服中心 软件技术 网站建设
  您现在的位置: 新疆二域软件开发公司 >> Java技术 >> 文章正文

如何在类被实例化之前动态静态常量

被动态改变的类如下:
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
我的目的要通过类加载来改变它的输出,实际上是改变了静态常量的值,也相当于改变了任何一个实例对该常量的引用值。

先判断该类是否为我们需要动态改变的类
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 {
*            //进行判断这个class是否已经调入,已经有就直接返回,不然就调入
*            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];
*        //实际应用时完全可以对一个文件进行加解密处理,只要保证使用*defineClass时classbyte中
*        //已经解密后的内容就可以
*        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 });
实例化该类,可以看到结果:
oImage = cImage.newInstance();
结果输出:
:):)
:))changed

总结:改方法可以用来解决一些特殊情况下遇到的问题,但是我不鼓励大家使用。在我新的设计中已经不考虑使用改方法,它对结构没有任何好处。

作者:efly | 文章来源:赛迪网 | 更新时间:2007-12-15 16:45:10

  • 上一篇文章:

  • 下一篇文章:

  • 相关文章:
    C++类的友元成员
    软件技术
    · 开发语言
    · Java技术
    · .Net技术
    · 数据库开发
    最新文章  
    ·j2se 嵌入式脚本抓取引擎
    ·JAVA开发的6个实践的例子
    ·JBuilder7 / Weblogic7开发
    ·JAVA中的抽象类型的一些概
    ·java语言开发程序中的几个
    ·了解java开发语言在软件开
    ·如何才能使用Java实现内部
    ·Java开发学习小心使用Date
    ·Java程序员应该了解那些开
    ·java性能优化的一些见解
    ·介绍JDK5.0一些collection
    ·基础学习:java中使用存储
    ·解析c#语言和java语言最相
    ·Java语言学习:jAVA中 的多
    ·Java是不是应该增加新特性
    关于我们 | 软件开发 | 下载试用 | 客服中心 | 联系我们 | 友情链接 | 网站地图 | 新疆电子地图 | RSS订阅
    版权所有 © 2016 新疆二域软件开发网 www.k8w.net All Rights Reserved 新ICP备14003571号
    新疆软件开发总机:0991-4842803、4811639.
    客服QQ:596589785 ;地址:新疆乌鲁木齐北京中路华联大厦A-5C 邮编:830000