码迷,mamicode.com
首页 > 编程语言 > 详细

Java--Reflect(反射)专题2——动态加载类

时间:2015-06-21 13:14:41      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:   java   反射   加载类   

转载请注明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







Java--Reflect(反射)专题2——动态加载类

标签:   java   反射   加载类   

原文地址:http://blog.csdn.net/uniquewonderq/article/details/46580975

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!