java动态加载类的好处_java reflect 初始学习 动态加载类

首先要理解Class类:

在java 的反射中,Class.forName("com.lilin.Office") 使用类的全名,这样获取,不仅仅表示了类的类类型,同时还代表着类的动态加载.

一般,我们编写好的java类,都要经过编译成class文件,然后才能被jvm执行字节码文件,通常我们比较熟悉的就是javac --》编译   java--》运行。

而类的动态加载,就是不需要编译的步骤,直接在运行时的动态加载。

动态加载总用场景:

一般用于功能性的类,方便添加/替换的扩展,类似于QQ的版本升级,OFFICE中的多个功能模块(WORD、EXCEL、PPT)。

下面用一个简单的实例,演示以下 动态加载的好处:

新建一个officeAble的接口类:定义统一的  office 启动接口。

public interfaceOfficeAble {/*** 功能启动*/

voidstart();

}

其次,建立好 自己的Word类,实现OfficeAble的接口,模拟测试word的启动操作:

packagereflect;/***@authorlilin

**/

public class Word implementsOfficeAble {

@Overridepublic voidstart() {

System.out.println("启动运行 word程序!");

}

}

最后,建立自己的office测试运行类,命令行参数,传入类的全名作参数测试:reflect.Word

packagereflect;/***@authorlilin

**/

public classOffice {public static void main(String[] args) throwsException {//动态加载类,在运行时刻加载,传入类的全名

Class c = Class.forName(args[0]);//newInstance方法获取实例对象,通过强制转换成统一的 officeAble的接口,多态的方案

OfficeAble officeAble =(OfficeAble) c.newInstance();

officeAble.start();

}

}

运行结果展示:启动运行 word程序! 完美运行,其实,本测试案例,最好用纯文本编辑代码,自己使用java 命令来编译执行,可以很清楚的指导,哪些是静态加载的类,哪些是动态的,动态加载的类,是不需要编译的,执行在运行时刻加载的。

如果现在,我们需要在增加一个PPT或者是EXCEL的功能,那我们只要仅仅新增加一个实现类,实现我们定义的统一的office接口,就能实时的运行我们新增加的功能类类。

类似于下面这样:运行时刻只要传入 reflect.Excel 的参数,就能实时的启动EXCEL的启动程序。

packagereflect;/***@authorlilin

**/

public class Excel implementsOfficeAble {

@Overridepublic voidstart() {

System.out.println("启动运行 EXCEl程序!");

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值