Java类动态加载

    xiaoxiao2022-07-07  168

    1、静态类加载

    说到动态加载,就得说说静态加载了。

    下面就通过一个例子来说明静态加载的特点:

    class Office{ public static void main(String[] args){ //new 创建对象 是静态加载类, //在编译时刻就需要加载所有可能使用到的类。 //不管是否使用到 //通过动态加载类可以解决该问题 if("Word".equals(args[0])){ Word w = new Word(); w.start(); } if("Excel".equals(args[0])){ Excel e = new Excel(); e.start(); } } }

    编译

    假如可能用到2个类,但是我们只想使用其中的某一个类Word,而不使用其他类。而在java代码编译成字节码.class文件的时候(静态编译),一旦哪个类没有,不管是否会用到,都会编译失败。

    这样显然不是我们希望看到的效果。那现在很多产品的在线下载文件做增量更新是怎么做到的呢?

    这就需要引入一个概念:动态加载

    2、动态加载类

    首先我们创建一个OfficeBetter.java的文件(对比上面Office.java)

    这里需要对类的表示方式有个基本的了解:https://blog.csdn.net/stoneWang_L/article/details/90578180

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

     

    interface OfficeAble{ public void start(); } class Word implements OfficeAble{ public void start(){ System.out.println("Word ... starts ..."); } }

     

    这个时候,我们再编译,会报错么?

    结果是不会的。只有当我们调用确定的类(Excel)时,如果该类不存在,那才会出现报错的情况。

    这就是类的动态加载的一个简单的例子。

    备注:该文章参考慕课Cedar老师的课程【反射——Java高级开发必须懂的】第二节

     

     

     

    最新回复(0)