本帖最后由 袁冬梅 于 2012-5-2 00:47 编辑
在做自定义类加载器实验的时候,我调用defineClass(byte[],int,int)方法就没有出错,调用defineClass(String,byte[],int,int)方法的时候,我把findClass参数里面的name也作为了defineclass的参数,结果出错了。
在重写findClass的时候需要调用defineClass(String name,byte[] b,int off,int len)这个函数,那么这里的String name ,应该传入哪个参数,看了好半天API,没看懂,看源代码更晕了。实验了很多最后也没得到正确的路径。
所以,想问问defineClass(byte[] b,int off,int len)这个类中,怎么获取String name这个值?这个name有什么意义?怎么来定义这个参数才不会出错?- Class clazz= new MyClassLoaderTest("itcastLib").loadClass("ClassForClassLoader");//使用自定义类加载器加载类的实例对象
- Object obj = clazz.newInstance();
- System.out.println(obj);
复制代码 代码部分因为出现这个错误,后来已经被我修改到和张老师一模一样了,加密解密等等步骤都没有问题。我估计应该是我使用[url=file:///C:/Documents%20and%20Settings/Administrator/桌面/jdk1.6API中文版/java/lang/ClassLoader.html#defineClass(java.lang.String, byte[], int, int)]defineClass(String, byte[], int, int)[/url]方法的String参数错误的原因 。
我自己实验了两种参数:
一种是和findclass方法里面的name,只传入了类的名字。即 name=“ClassForClassLoader";
错误:
Exception in thread "main" java.lang.NoClassDefFoundError: ClassForClassLoader (wrong name: cn/itcast/day2/ClassForClassLoader)
一种是findclass方法里面获取class的路径,即name = "classLib\\ClassForClassLoader.class";
错误:
Exception in thread "main" java.lang.NoClassDefFoundError: classLib\ClassForClassLoader/class (wrong name: cn/itcast/day2/ClassForClassLoader)
会的同学教一下我,可以的话,帮我分析一下这个错误的意思吧!谢谢。O(∩_∩)O~ |