能不能获取Java 虚拟机已加载的所有类???

wangning_688 2011-07-20 12:52:25
能不能在Java代码中获取Java 虚拟机已加载的所有类的Class对象???
...全文
841 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
mtv0199 2011-07-31
  • 打赏
  • 举报
回复
执行的时候加个启动参数:-verbose
liboofsc 2011-07-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wangning_688 的回复:]
引用 3 楼 wangning_688 的回复:
Java code


import java.lang.reflect.Field;
import java.util.Vector;

public class Test_ {
public static void main(String[] args) throws SecurityException,
NoSuchFiel……
[/Quote]
+1
wangning_688 2011-07-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wangning_688 的回复:]
Java code


import java.lang.reflect.Field;
import java.util.Vector;

public class Test_ {
public static void main(String[] args) throws SecurityException,
NoSuchFieldException……
[/Quote]

上面错了,应该是

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_
wangning_688 2011-07-20
  • 打赏
  • 举报
回复

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……
wangning_688 2011-07-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 spiniper 的回复:]
可以,获得所有的classLoader,然后用反射调用其classes的私有属性。
[/Quote]
classes是java.lang.ClassLoader的私有属性,java.lang.ClassLoader又是abstract类型的,获取到的classLoader对象是java.lang.ClassLoader子类的对象,是无法获取classes私有属性的~~不知楼上大侠有什么办法获取classes私有属性,请给出Java代码!!!
树成 2011-07-20
  • 打赏
  • 举报
回复
可以,获得所有的classLoader,然后用反射调用其classes的私有属性。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧