能不能在Java代码中获取Java 虚拟机已加载的所有类的Class对象???

解决方案 »

  1.   

    可以,获得所有的classLoader,然后用反射调用其classes的私有属性。
      

  2.   

    classes是java.lang.ClassLoader的私有属性,java.lang.ClassLoader又是abstract类型的,获取到的classLoader对象是java.lang.ClassLoader子类的对象,是无法获取classes私有属性的~~不知楼上大侠有什么办法获取classes私有属性,请给出Java代码!!!
      

  3.   


    import java.lang.reflect.Field;
    import java.util.Vector;public class Test_ {
    public static void main(String[] args) throws SecurityException,
    NoSuchFieldException, IllegalArgumentException,
    IllegalAccessException, ClassNotFoundException {
    ClassLoader classLoader = Test_.class.getClassLoader();
    Class cla = classLoader.getClass();
    while (cla != ClassLoader.class)
    cla = cla.getSuperclass();
    Field field = cla.getDeclaredField("classes");
    field.setAccessible(true);
    Vector v = (Vector) field.get(classLoader);
    for (int i = 0; i < v.size(); i++) {
    System.out.println(v.get(i).getClass().getName());
    }
    }
    }
    这样获取出来的只有java.lang.Class……
      

  4.   


    上面错了,应该是
    import java.lang.reflect.Field;
    import java.util.Vector;public class Test_ {
    public static void main(String[] args) throws SecurityException,
    NoSuchFieldException, IllegalArgumentException,
    IllegalAccessException, ClassNotFoundException {
    ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
    Class cla = classLoader.getClass();
    while (cla != ClassLoader.class)
    cla = cla.getSuperclass();
    Field field = cla.getDeclaredField("classes");
    field.setAccessible(true);
    Vector v = (Vector) field.get(classLoader);
    for (int i = 0; i < v.size(); i++) {
    System.out.println(((Class)v.get(i)).getName());
    }
    }
    }但是获取出来的只有Test_
      

  5.   

    执行的时候加个启动参数:-verbose