自定义类加载器

本文介绍了一种自定义类加载器的实现方法,通过继承`ClassLoader`并重写`findClass`方法来完成类的加载过程。示例中演示了如何从文件系统中读取字节码文件,并将其转换为`byte[]`数组,再通过`defineClass`方法将字节码定义为一个`Class`对象。
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());
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值