关于java反射。在硬盘随便选一个jar文件,不再应用程序的lib库中,我要反射他的包、类、属性、方法怎么做? 如题,那位大哥帮帮忙,小弟非常感激。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 读jar文件, File.list() 得到文件名, 取.class文件,需要加载哪个class文件.比如"com.test.Test.class", 在程序中用如下语句:Object o = Class.forName("com.test.Test").newInstance();这个o就是你所需要的东西了, 然后Class c = o.getClass();得到c后再查查JDK文档,看看你到底是想要调用它的方法呢,还是要取得它的属性值. 调用相应的方法即可 jar文件没有在我的classpath目录,这样好像不行吧。 可以, 在执行java 命令时, 加上 -cp jar文件目录 楼上的这种做法是肯定不行的,不在classpath中,你在命令中加,那就不符合题目要求了,是要完全动态选择一个jar文件,这种我没有写过,不知道怎么解决。 不知道是否可以试试这种方法,选择一个文件后,将文件复制到classpath中,然后在进行读取文件。 String jarfile = "file:///C:/Something.jar";String classname = "some.clazz";URLClassLoader cl = new URLClassLoader(new URL[] { new URL(jarfile) });Class clz = cl.loadClass(classname);System.out.println(clz.getName());... 楼上的方法是可以,但是如果我想读取类里面的Method和Field的话,有些就会出错,有些不出错,我觉得原因是有些方法调用了没有引用进来的包,对不对。 http://blog.csdn.net/treeroot/archive/2006/03/21/631490.aspxClassLoaderUtil.addClassPath("C:/Something.jar); 怎么觉得好像我回过这篇文章写一个最简单的ClassLoaderclass SimpleLoader extends ClassLoader{ /** 创建一个指定的类 * @param className 类的全称,如: hermit.math.Operator * @param classPath jar包所在的路径,如: d:/hermit.jar */ public Class findClass(String className,String classPath) throws ClassNotFoundException{ ClassPath cp = new ClassPath(classPath); byte[] b = null; try{ b = cp.getBytes(className); }catch(Exception e){ throw new ClassNotFoundException(); } return defineClass(className,b,0,b.length); }}然后SimpleLoader loader = new SimpleLoader();Class classanyway = loader.findClass('yourclassname','yourjarfilepath');就可以得到一个类对象了 LexChen(阿修罗),ClassPath对象是什么呀。 To LexChen(阿修罗) :如果该类有父类就会出问题~ java中一个简单的强制转化问题 java继承的问题 那位大大能告诉我下面的java正则表达式结果是为什么啊 连接数据库问题 关于Scanner的一个问题 JFrame往上放东西,大家是不是一定要getContentPane().add.... hibernate 的小问题,不能插入~ 求救各位 正则表达式 关于jsp页面刷新和点击地址栏右边的箭头的区别? 如何制作鼠标停留在超链接时,出现子菜单(希望各位大哥大姐赐教源代码,谢谢!) 大家来讨论一下吧. 如何在JTextField 或 JTextArea 中实现这样的功能?
这个o就是你所需要的东西了, 然后Class c = o.getClass();
得到c后再查查JDK文档,看看你到底是想要调用它的方法呢,还是要取得它的属性值. 调用相应的方法即可
String classname = "some.clazz";
URLClassLoader cl = new URLClassLoader(new URL[] { new URL(jarfile) });
Class clz = cl.loadClass(classname);
System.out.println(clz.getName());
...
ClassLoaderUtil.addClassPath("C:/Something.jar);
class SimpleLoader extends ClassLoader{
/** 创建一个指定的类
* @param className 类的全称,如: hermit.math.Operator
* @param classPath jar包所在的路径,如: d:/hermit.jar
*/
public Class findClass(String className,String classPath) throws
ClassNotFoundException{
ClassPath cp = new ClassPath(classPath);
byte[] b = null;
try{
b = cp.getBytes(className);
}catch(Exception e){
throw new ClassNotFoundException();
}
return defineClass(className,b,0,b.length);
}
}然后SimpleLoader loader = new SimpleLoader();
Class classanyway = loader.findClass('yourclassname','yourjarfilepath');
就可以得到一个类对象了
如果该类有父类就会出问题~