怎么样加载一个类进到运行的类中来.
我用了ClassLoader来实现.可是实现不了
比如: D:\java文件夹下有一个Hello.java文件.里面是一个类Class Hello
怎么样在别的类里加载这个类来用.
谢谢

解决方案 »

  1.   

    跟 java文件 没关系
    类加载有三种基本方法class A{}
    class B{}
    class C{}
    public class Loader{
        public static void main(String[] args) throws Exception{
           Class aa=A.class; 
           Class bb=Class.forName("B");
           Class cc=ClassLoader.getSystemClassLoader().loadClass("C");
        }
    }
      

  2.   

    Class aa=A.class; 
           Class bb=Class.forName("B");
           Class cc=ClassLoader.getSystemClassLoader().loadClass("C");
     这个小弟用了..但加载进来以后要怎么运行各个加载进来的类?请指点
      

  3.   

    要调用其中的方法可以使用
    Method method = cc.getDeclaredMethod(String name, Class<?>... parameterTypes) //中间是参数说明然后用method.invoke(Object obj, Object... args)
    调用得到的方法具体可以看API
      

  4.   

    理论楼上说了..我这么实现要调用的类
    public class Hello {
             public void Out(){
              System.out.println("Hello world");
             }
    }实现部分
    try {
    Class CC = Class.forName("Hello");
    Class ptypes[] = new Class[2]; 
    ptypes[0] = Class.forName("java.lang.String"); 
    ptypes[1] = Class.forName("java.util.Hashtable");  try {
    Object arg[] = new Object[2]; 
    arg[0] = null; 
    arg[1] = null; 
    Method method = CC.getDeclaredMethod("Out",ptypes);
    try {
    method.invoke(CC, arg);
    } catch (IllegalArgumentException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IllegalAccessException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (InvocationTargetException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    } catch (SecurityException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (NoSuchMethodException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    } catch (ClassNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }可是我还是调试不通..
      

  5.   

    你Hello类中的Out方法并没有参数 而你调用Method method = CC.getDeclaredMethod("Out",ptypes);时却加了两个参数 String HashMap
    试试这段代码:(我试过可以打印Hello World)
    import java.lang.reflect.*;public class Test{
            
    public static void main(String []args) {
      try {

    Class CC = Class.forName("Hello");
    Class ptypes[] = new Class[2]; 
    ptypes[0] = Class.forName("java.lang.String"); 
    ptypes[1] = Class.forName("java.util.Hashtable");  try {
    Object arg[] = new Object[2]; 
    arg[0] = null; 
    arg[1] = null; 
    Method method = CC.getDeclaredMethod("Out",null);//,ptypes);
    try {
    method.invoke((Hello)CC.newInstance(),null);//, arg);
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();

    } catch (SecurityException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (NoSuchMethodException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
      } catch (ClassNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
      }
         }
    }
      

  6.   

    我改动了几处 你都注意一下
    Method method = CC.getDeclaredMethod("Out",null);//,ptypes);
    method.invoke((Hello)CC.newInstance(),null);//, arg);
      

  7.   

    请问用这三中方法把类加载出来后,好像还是有点问题,我在这3(A,B,C)个类中添加了方法,然后用aa,bb,cc这三个对象来加载这是些方法,好像就报错,我也不知道怎么回事。
    Class aa=A.class;
    Class bb=Class.forName("B");
    Class cc=ClassLoader.getSystemClassLoader().loadClass("C");