java反射动态加载类Class.forName();

1,所有的new出来的对象都是静态加载的,在程序编译的时候就会进行加载.而使用反射机制Class.forName是动态加载的,在运行时刻进行加载。

例子:直接上两个例子

public class CarFactory {
	public static void main(String[] args) {
		if("Jeep".equals(args[0])){
			Jeep jeep=new Jeep();
			jeep.start();
		}
		if("BYD".equals(args[0])){
			BYD byd=new Byd();
			byd.start();
		}
	}
}

以上代码如果在编译时候,缺少Jeep或者BYD任何一个类,编译都会报错,即使你现在暂时只想用Jeep,没有BYD。再看反射的代码

public class CarFactory {
	public static void main(String[] args) {
		try{
			Class c=Class.forName(args[0]);//动态加载类,运行时刻加载类
			Car car=c.newInstance();//car是接口,所有汽车实现该接口,都有start方法
			car.start;//启动,多态机制
		}catch (Exception e) {
			// TODO: handle exception
		}
	}
}

以上代码是第一段代码的改进,即使只有Jeep类,也能使用,编译时候不会报错。后面可以随便添加Car,扩展性好

posted on 2017-11-13 15:40  天生一对  阅读(438)  评论(0编辑  收藏  举报

导航