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

前面已经知道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实现提供的功能。


你可能感兴趣的:(Java)