Rumah > Java > javaTutorial > Bagaimana untuk mengatasi kaedah findClass() dalam Java?

Bagaimana untuk mengatasi kaedah findClass() dalam Java?

WBOY
Lepaskan: 2023-04-22 22:40:22
ke hadapan
1160 orang telah melayarinya

Penerangan Kaedah

1 Dengan menggunakan kaedah findClass(String), anda boleh memuatkan semula fail bytecode kelas, kerana dalam ClassLoader, kaedah ffindClass diubah suai oleh protected dan hanya boleh memanggil selimut Kelas tidak mempunyai kaedah yang dilaksanakan dan hanya membuang pengecualian ClassNotFoundException.

2. Tulis semula kaedah findClass supaya ia boleh dipanggil oleh objek luaran dan kelaskan kod logik fail bytecode.

Contoh

package com;
import java.io.InputStream;
import java.net.URL;
public class MyClassLoader extends ClassLoader{
    /**
     * 加载class文件
     * 重写此方法的目的是为了能让此方法被外部调用,父类的 findClass 是 protected 修饰的,只能被子类调用
     * @param name   类的全类名 示例: com.xd.User
     * @return
     * @throws ClassNotFoundException
     */
    @Override
    public Class<?> findClass(String name) throws ClassNotFoundException {
        try {
            // 获取class文件名称  去掉包路径
            String fileName = name.substring(name.lastIndexOf(".") + 1) + ".class";
            // 获取文件输入流
            InputStream is = this.getClass().getResourceAsStream(fileName);
            // 读取字节
            byte[] b = new byte[is.available()];
            is.read(b);
            // 将byte字节流解析成jvm能够识别的Class对象
            return defineClass(name, b, 0, b.length);
        } catch (Exception e) {
            throw new ClassNotFoundException();
        }
    }
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk mengatasi kaedah findClass() dalam Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan