`
xjb19880523
  • 浏览: 1516 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

ClassLoader 加载有父类和初始化过的类解决java.lang.NoClassDefFoundError 和InvocationTargetExc

阅读更多
最近因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类加载器1

    加载阶段是查找或生成字节码,链接阶段则包括验证、准备和解析,初始化则是执行类构造器`&lt;clinit&gt;`方法。 2. `java.lang.ClassLoader`: 这是所有Java类加载器的基类,提供了如`loadClass()`, `findClass()`, `...

    Java_ClassLoader详解

    通过上述分析,我们对 Java 中的类加载机制有了更深入的理解,这对于解决常见的 `ClassNotFoundException` 和 `NoClassDefFoundError` 等异常问题非常有帮助。同时,合理地利用类加载器可以提高应用程序的灵活性和...

    类加载机制1

    Java 类加载机制是Java语言的核心特性之一,它允许程序在运行时动态地加载和执行类。这个机制在Java 1.0版本时引入,最初是为了支持Java Applet,即可以在Web浏览器中运行的小型Java应用程序。随着时间的发展,类...

    java深度历险,介绍java类的加载

    Java深度历险,让我们一起探索Java类的加载机制,这是Java高级编程中至关重要的一部分,尤其对于有基础的Java开发者来说,深入理解这个话题能够提升你的编程能力,优化系统性能,以及更好地解决运行时问题。...

    ClassLoader 深入解析

    总之,理解ClassLoader的工作原理和机制,可以帮助我们更好地管理Java应用程序的类加载,解决因类加载引发的问题,甚至实现高级功能如动态加载和热更新。对于Java开发者来说,深入研究ClassLoader是提升技能的重要一...

    金蝶Apusic应用服务器V6参考b手册b.doc

    这两个方法的行为有轻微的区别,Class.forName()在类装载完成后,会对类进行初始化,而ClassLoader.loadClass()只负责装载类。 * 隐式类装载发生在由于引用、实例化或继承导致需要装载类的时候。隐式类装载是在幕后...

    JAVA错误处理大集合

    - **描述**:当Java虚拟机(JVM)或ClassLoader实例尝试加载一个类的定义时找不到此类的定义。 - **示例**:缺少`commons-beanutils.jar`。 - **解决方法**: - 确认项目依赖中包含了`commons-beanutils.jar`。 - ...

Global site tag (gtag.js) - Google Analytics