转载请注明:http://blog.csdn.net/uniquewonderq
首先区分什么是动态加载,什么是静态加载?
Class.forName("类的全称");//第三种表达类类型的方式
不仅代表了类的类类型,还代表了动态加载类
要区分编译和运行。
编译时刻加载类是静态加载类。运行时刻加载类是动态加载类。
在编译时刻就需要加载所有的可能使用到的类。
演示代码如下:功能性的类,最好使用动态加载。如,更新,升级,增加新功能等。
首先是一个接口,用于动态加载的。稍候可体验出来。
package com.test; interface OfficeAble { public void start(); }
其次,定义一个word和excel分别实现这个接口
package com.test; class word implements OfficeAble{ @Override public void start(){ System.out.println("word..start"); } }
package com.test; /** * * @author wonderq */ public class Excel implements OfficeAble{ @Override public void start(){ System.out.println("word..start"); } }
下面是测试的officeBetter类
package com.test; public class OfficeBetter { public static void main(String[] args) { String className="com.test.word"; System.out.println("className="+className); try { //动态加载类,在运行时刻,编译时刻不报错 Class c=Class.forName(className); //通过类类型,创建该类的类型 OfficeAble oa=(OfficeAble)c.newInstance();//父类变量oa指向子类对象 oa.start(); } catch (Exception e) { e.printStackTrace(); } } }
这样子就可以不用编译的静态加载类,而是在每次运行这个类的时候动态加载类。减小了系统的开销。当然,这个程序可以在写一个方法,然后参数写类的名字即可,就可以封装为一个独立的模块。
运行此类的结果:
run:
className=com.test.word
word..start
时间: 2024-10-13 12:06:04