import java.lang.ClassLoader;
import java.io.*;
class LoadClass extends ClassLoader
{
//定义加载的类名称
private String className;
private String classPath;
public LoadClass(String className,String classPath)
{
this.className = className;
this.classPath = classPath;
}
public Class<?> findClass(String name)
{
byte [] bytes = toBytes();
return this.defineClass(name, bytes, 0, bytes.length);
}
private byte[] toBytes()
{
FileInputStream fileInput = null;
ByteArrayOutputStream byteos = null;
try
{
fileInput = new FileInputStream(new File(new File(this.classPath),this.className));
if(fileInput != null)System.out.println("fadsf");
byteos = new ByteArrayOutputStream();
int bt = 0;
while((bt = fileInput.read()) != -1)
{
byteos.write(bt);
}
if(fileInput != null)
{
fileInput.close();
}
if(byteos != null)
{
byteos.close();
}
return byteos.toByteArray();
}
catch (Exception ex)
{
throw new RuntimeException(ex.getMessage());
}
}
}
class ClassLoaderDemo
{
public static void main(String[] args)
{
if(args.length != 2)
{
System.out.println("参数不对,请重新输入。");
return;
}
try
{
//建立自定义类加载对象
LoadClass myLoad = new LoadClass(args[0],args[1]);
//加载类
Class<?> cls = myLoad.loadClass(args[0]);
Student stu = (Student)cls.newInstance();
stu.getName();
}
catch (Exception ex)
{
throw new RuntimeException(ex.getMessage());
}
}
}
自定义类加载器
最新推荐文章于 2022-09-08 18:53:26 发布
本文介绍了一种自定义类加载器的实现方法,通过继承`ClassLoader`并重写`findClass`方法来完成类的加载过程。示例中演示了如何从文件系统中读取字节码文件,并将其转换为`byte[]`数组,再通过`defineClass`方法将字节码定义为一个`Class`对象。
912

被折叠的 条评论
为什么被折叠?



