您的位置:首页 > 编程语言 > Java开发

Java反射学习总结(2)——动态加载类

2016-06-15 21:11 489 查看
前面已经知道Class.forName()可以得到类的类类型,我们还可以通过它实现类的动态加载,比如在JDBC中加载数据库驱动我们就采用这种方式实现,类的加载有两种方式:编译时刻加载属于静态加载类,运行时加载属于动态加载。动态加载可以在源码编译期间缺失某些暂时用不到的类,当项目执行到一定阶段需要调用此类时,才进行加载。动态加载可以使项目维护变得简单,实现的新功能可以通过动态加载进去而无需改动原始代码,下面通过示例进行展示:

package reflectTest;

public class Office {
public static void main(String[] args){
try{
//动态加载类,在运行时刻加载
Class c = Class.forName(args[0]);
//通过类类型,创建该类对象
OfficeAble oa = (OfficeAble)c.newInstance();
oa.start();
}catch(Exception e){
e.printStackTrace();
}
}

}
//接口定义
interface OfficeAble{
public void start();
}
//实现Word类
class Word implements OfficeAble{

@Override
public void start() {
// TODO Auto-generated method stub
System.out.println("start Word...");
}

}
//实现Excel类
class Excel implements OfficeAble{

@Override
public void start() {
// TODO Auto-generated method stub
System.out.println("start Excel...");
}

}分析上面的例子,当运行时如果我们输入参数为Word,则动态加载Word类,打印输出start Word...,这时如果Excel类没有实现,程序运行都不会报错,因为不会加载Excel类,同理当运行时输入参数为Excel,处理过程同上。并且如果我们要扩展Office,添加PowerPoint等功能也非常简单,只要实现了PowerPoint类,Office类不做任何改动就可以

在运行时传入参数PowerPoint实现提供的功能。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: