在Java自定义类装入器中调用findClass时指定类名
在customer类装入器中,我有一个findClass方法,如下所示:在Java自定义类装入器中调用findClass时指定类名,java,class,Java,Class,在customer类装入器中,我有一个findClass方法,如下所示: public Class findClass(String className){ byte classByte[]; Class result=null; result = (Class)classes.get(className); if(result != null){ return result; } try{ return fi
public Class findClass(String className){
byte classByte[];
Class result=null;
result = (Class)classes.get(className);
if(result != null){
return result;
}
try{
return findSystemClass(className);
}catch(Exception e){
}
try{
String classPath =
((String)ClassLoader.getSystemResource(className.replace('.',File.separatorChar)+".class").getFile()).substring(1);
classByte = loadClassData(classPath);
result = defineClass(className,classByte,0,classByte.length,null);
classes.put(className,result);
return result;
}catch(Exception e){
return null;
}
}
如果某个类在默认包中,如何指定要查找的该类的名称。例如,如果类名为
myclass.class
,如何将此名称传递给此方法。将其称为findClass(“myclass”)
或findClass(“myclass.class”)
似乎不起作用 很可能是由于您提供的名称有问题,请确保它有正确的包前缀
给定类似“java.lang.string”的字符串的方法将查找文件“java/lang/string.class”(在unix文件系统上)。您可能需要检查要加载的类的文件夹目录/包名称
它是用点分隔的包名,然后是类名,例如:
Class.forName("java.lang.String");
或
请尝试使用完全限定名:
findClass(“mypackage.MyClass”)
findClass(“mypackage.MyClass”)
由于该类位于默认包中,因此没有要指定的包。这个类在一个罐子里。如果jar是“Myjar.jar”,而类是“Myclass.class”,那么如果该类不在默认包之外的包中,我将如何指定该类的名称。因为该类在默认包中,所以没有要指定的包。这个类在一个罐子里。如果jar是“Myjar.jar”,而类是“Myclass.class”,那么如果类不在默认包之外的包中,我将如何指定该类的名称。
Class.forName("myclass");