最近因ClassLoader 加载动态类 费了很大劲 最终高人指点解决 贴出来大家分享一下
因为加载的类中有父类和 和其它引用类 并且都初始化和使用过 问题就是因为这
这是个是自定义ClassLoad类
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
public class ClassLoad extends ClassLoader {
ClassLoad(ClassLoader parent) {
super(parent); //这个很重要解决父类用过的问题
}
private static ClassLoad instance = null;
static InputStream in = null;
public static ClassLoad getInstance(InputStream in,ClassLoader parent) {
try {
instance = new ClassLoad(parent);
ClassLoad.in = in;
} catch (Exception e) {
System.out.println(e.toString());
}
return instance;
}
@Override
protected Class<?> findClass(String name) throws ClassNotFoundException {
try {
ByteArrayOutputStream out = new ByteArrayOutputStream();
int n;
while ((n = in.read()) != -1) {
out.write(n);
}
byte b[]=out.toByteArray();
in.close();
Class<?> myclass = findLoadedClass("parser.YouJiuBaGuaParser");
if (myclass == null) {
myclass = defineClass(null,b, 0, b.length);
return myclass;
} else {
return myclass;
}
} catch (Exception e) {
System.out.println(e.toString());
return null;
}
}
}
下边这个是普通类在调用 in 是从数据库或从硬盘上取了的InputStream流这个abc是象征性的东西没用大家可自行修改
Class<?> c = ClassLoad.getInstance(in,this.getClass().getClassLoader()).findClass("abc");
parser.YouJiuBaGuaParser这个是我的包名还有类名
分享到:
相关推荐
在Java编程中,`java.lang.StackOverflowError` 是一个常见的运行时异常,它通常发生在程序执行过程中,当Java虚拟机(JVM)的调用栈溢出时。调用栈是每个线程用来存储方法调用信息的数据结构,当递归调用过深或者...
2. 使用`java.lang.ClassLoader.loadLibrary()`代替`System.loadLibrary()`,这样可以提供更精确的库文件路径。 3. 检查是否有其他依赖库冲突,有时多个库可能使用相同的名字,导致加载混乱。 最后,博客链接...
5. **NumberFormat**: 负责数字的格式化和解析,虽然不在给出的列表中,但在`java.lang`包的上下文中仍然重要。 6. **Object**: 所有类的基类,包含诸如`equals()`, `hashCode()`, `toString()`等基础方法。 7. **...
在Java编程语言中,`java.lang.reflect`包是核心库的一部分,它提供了运行时访问类、接口、字段和方法的能力。这个包对于理解和操作对象的动态特性至关重要,尤其是在实现反射机制时。反射允许我们在程序运行期间...
at java.lang.ClassLoader.loadClassHelper(ClassLoader.java:688) at java.lang.ClassLoader.loadClass(ClassLoader.java:667) at com.ibm.ws.bootstrap.ExtClassLoader.loadClass(ExtClassLoader.java:119) at...
java.lang.NoClassDefFoundError: org/jaxen/JaxenException at org.dom4j.DocumentFactory.createXPath(DocumentFactory.java:230) at org.dom4j.tree.AbstractNode.createXPath(AbstractNode.java:207) at org....
总之,解决“java.lang.ClassNotFoundException: org.jdom.input.SAXBuilder”问题的关键在于确保JDOM库被正确地包含在类路径中,同时检查代码中涉及的类名拼写是否准确。了解并熟练使用SAXBuilder可以帮助开发者...
总之,深入理解Java的ClassLoader机制和类变量初始化顺序是提升Java编程技能的重要步骤。通过学习这些知识点,开发者可以更好地优化代码、设计更健壮的系统,并解决与类加载和初始化相关的复杂问题。
开发者可以通过继承java.lang.ClassLoader类,创建自己的类加载器。这在处理动态加载、插件系统、隔离应用域等场景时非常有用。自定义类加载器需要覆盖`findClass()`方法,实现类的查找和加载逻辑。 4. 双亲委派...
Java语言的核心库之一就是`java.lang`包,它包含了Java程序设计中最基础的类和接口,这些类和接口是每个Java应用程序必不可少的。由于`java.lang`包在编译时自动导入,因此程序员无需显式引入。本章将详细探讨这个...
java.lang包还包含了一些与安全、线程和内存管理相关的类,如SecurityManager用于安全管理,Thread和ThreadGroup是线程相关的类,ClassLoader负责加载类,ThreadLocal为每个线程提供独立的变量副本,而Runtime类提供...
Java类加载器分为三种主要类型:引导类加载器(Bootstrap ClassLoader)、扩展类加载器(Extension ClassLoader)和应用程序类加载器(Application ClassLoader,也称为系统类加载器)。它们共同工作,确保了Java...
在Java编程语言中,`java.lang`包是所有其他包的基础,它包含了Java程序中最基本、最核心的类。这个包中的类无需显式导入就能在任何Java源代码中使用,因为它们已经被自动导入到每个Java应用程序的上下文中。在这个...
它不仅管理类的生命周期,还确保了类的正确加载和初始化,是Java动态特性的基石。 #### 类加载器的工作原理 Java类加载器遵循按需加载原则,即只有当应用程序真正需要使用某个类时,类加载器才会去加载它。这一...
1. 类加载过程:Java中的类加载分为三个阶段——加载、验证、准备、解析和初始化。ClassLoader主要参与的是加载阶段,它从磁盘、网络或其他数据源读取字节码文件,并将其转换为Class对象。 2. 类加载器层次结构:...
正确理解类加载器能够帮你解决 NoClassDefFoundError 和 java.lang.ClassNotFoundException,因为它们和类的加载相关。类加载器通常也是比较高级的 Java 面试中的重要考题,Java 类加载器和工作原理以及 classpath ...
at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Unknown Source) at ...
这个过程涉及到类加载器(ClassLoader),它是JVM的一部分,负责查找和加载类。 在`java.lang.Class`中,`newInstance()`方法用于创建一个类的新实例,而`getMethods()`和`getFields()`则分别用于获取类的所有公共...
在初始化阶段,类加载器会对加载的类进行初始化,包括静态变量的初始化和 static 块的执行。 Java 的类加载器机制是 JVM 运行过程中的核心组件,负责加载和管理 Java 类。理解类加载器的工作原理可以帮助开发者更好...