我要做个程序,运行时能动态运行其他class文件中的方法(class文件路径及其中的方法都已知)。而class文件是可以改变的,所以要是动态的。本人对java没什么了解。现在没头绪,请各位达人指教。

解决方案 »

  1.   

    这个。看看classLoader吧
    URLClassLoader
      

  2.   

    Class类里面有:
    getConstructor(Class<?>... parameterTypes) 得到构造函数
    getDeclaredField(String name) 得到字段
    getDeclaredMethod(String name, Class<?>... parameterTypes) 得到方法
    等等
    Method类:
    Object invoke(Object obj, Object... args)就可以调用方法差不多了吧....
      

  3.   

    我是要在程序里动态调用,比如说输入一个链接c:/test.class,程序就调用里面的test()方法。二楼的方法我在看
      

  4.   

    可以,但是前提是你这些class都已经在classpath中了。如果不在classpath中,要自己写个classloader,具体怎么写,楼主可以google下。
      

  5.   

    仅仅是使用 classload 装载只能动态装载 jvm刚开始没有装载的 Class,但不能解决Class clazz1被装载,但我人为修改clazz1,同时需要在jvm中重新装载clazz1,也就是reload.这个需求已经涉及字节码变动,需要使用jvm的tool.jar包,调用jvm类进行reload操作。tool.jar包含了很多字节码操作函数,一般jdk启动是不会将tool.jar包含在classpath中的。推荐LZ看下javassist的 动态装载示例,里面有你的需求的解决办法。可以适当的看下javassist里面的源码。