浅谈JAVA动态扩展

1、我们知道,有了JAVA的反射给动态加载带来的许多方便之处,JAVA动态加载一般使用两种方式,一个是利用Class.forName(String className),Class.forname(String className,boolean initalize),这两个方法都是加载一个className名称的类,区别在于第二个方法如果第二个参数为true的话,不仅加载这个类,还会给它初始化,也就是返回一个已经初始化的类,在调用forName之前如果类已经被初始化过,则就算是false也会返回一个已经初始化的类,我们知道,一个类在虚拟机的生命周期中是分几个阶段的,从加载到连接到初始化,每一个过程都是在不同的时期执行的,执行的具体方式这里就不进行介绍了,请大家参考具体资料。另外一种就是自定义的类加载器,也可以让我们自动的在运行期间加载我们需要使用到的类型,它是classloader的子类。
2、实际使用哪种方式?
如果程序没有特殊的需要,一般使用Class.forName的形式加载,首先它是比较方便个人认为直接调用,虽然自定义的装载器编写也不是很复杂,但是这样的方式在很多场合更加直接。其次在有些场合我们可能一定得需要用到这种方式,因为它可以在装载的时候同时初始化,比如在JDBC的驱动程序中,装载它的时候我们需要是同时也已经初始化过了的类,不然的话别的类的静态初始化方法是无法调用它来实现功能的,而自定义的装载器只是装载,不会初始化开始的时候。
3、使用自定义装载器
我们知道每个类装载器装载类的时候,都可以自定义一套安全的装载方式,以满足安全的需要,class.forname从这个角度上讲不如自定义装载器。
4、class.forname方式有好多功能是做不到的,它只能加载classpath来的类,也就是说它加载类的位置有限,不能任意的加载,而自定义的类加载器就不一样,它可以加载任意位置的类,只要我们的实现去实现它,只要是class文件它都可以加载。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值