java.lang.ClassFormatError: Incompatible magic value 1885430635 in class file

以下是报错源码

public class MyClassLoader extends ClassLoader {

    private File classPathFile;

    public MyClassLoader() {
        String path = MyClassLoader.class.getResource("").getPath();
        this.classPathFile = new File(path);
    }

    @Override
    protected Class<?> findClass(String name) throws ClassNotFoundException {
        String className = MyClassLoader.class.getPackage().getName() + "." + name;
        if (classPathFile != null) {
	        //这里出现错误,classloader只能加载.class文件
            File classFile = new File(classPathFile, name.replace(".", "\\") + ".java");
            if (classFile.exists()) {
                try (FileInputStream in = new FileInputStream(classFile);
                     ByteArrayOutputStream out = new ByteArrayOutputStream()) {
                    byte[] bytes = new byte[1024];
                    int len;
                    while ((len = in.read(bytes)) != -1) {
                        out.write(bytes, 0, len);
                    }
                    return defineClass(className, out.toByteArray(), 0, out.size());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return super.findClass(name);
    }
}

在使用自定义classloader加载类时,由于粗心大意,出现了一点错误.
java.lang.ClassFormatError: Incompatible magic value 1885430635 in class file xxx
原因是不能使用ClassLoader加载java源码文件,就是.java文件,只能加载.class文件
因此上面需要修改
File classFile = new File(classPathFile, name.replace(".", "\\") + ".class");

关于如何动态创建类并加载到内存中可参考这里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值