假如我有一个类,实现了一个接口,接口已知。
要怎么加载这个类?只知道类名,还是它的物理位置。

解决方案 »

  1.   

    可以通过两种方式
    1.Class.forName(String className)
    2.ClassLoader.loadClass(String className,boolean resolve)  参数resolve表示是否连接以上方法都可以动态的,在程序运行过程中加载类。className是类的全限定类名,并且这个类的.class文件必须在jvm的CLASS_PATH上
      

  2.   

    什么叫全限定类名?是包名加类名吗。如果只知道物理位置和类名呢,不一定在CLASS_PATH上
      

  3.   

             URL url = new URL("file:/G:/workspace/android_workspace/workspace/TestPlugin/plugin/HelloWorld.jar");
                URLClassLoader myClassLoader = new URLClassLoader(new URL[]{url});
                Object o = myClassLoader.loadClass("com.wizard.HelloWorld").newInstance();
      

  4.   

    呵呵~ 凑个热闹,1楼6楼正解!总结一下:
    1. 想要加载的类在java虚拟机启动前已经存在于classPath中,要加载这个类,参看1楼回答
    2. 想要加载的类不在classPath中,或者java虚拟机启动后才放入classPath中,这时需要变更ClassLoader。参考6楼回答。