java反射 二、动态加载类

2-1 Java动态加载类

Class.forName("类的全称")

  • 不仅表示了类的类类型,还代表了动态加载类
  • 请大家区分编译、运行
  • 编译时刻加载类是静态加载类、运行时刻加载类是动态加载类

Word word  = new Word();

//new 创建对象 是静态加载类,在编译时刻就需要加载所有可能使用到的类

//通过动态加载类,可以解决该问题

Class c = Class.forName(args[0]);

//动态加载类,在运行时刻加载

//通过类类型创建该类对象

OfficeAble oa = (OfficeAble)c.newInstance();

oa.start();

class Word implements OfficeAble{

    publc void start(){}

}

class Excel implements OfficeAble{

    public void start(){}

}

interface OfficeAble{

    void start();

}

通过Class a=Class.forName(arg[0]);此时为动态加载,因为编译时不知道使用哪个类,因此编译没有加载任何类,通过编译。运行时,根据 Javac office.java word (word为arg[0],也是类类型),去确定a是哪个类。这就是动态加载。如果word不存在,此时运行会报错。这就是为何有时候会出现编译通过,运行报错的原因。

动态加载一个好处,就是可以随时增加需要编译的类。例如没有excel类,只有word类,也可以运行,需要excel类时再由程序员写此类(为了能统一控制,word类、excel类需要继承同一个父类或者继承同一个接口)。

猜你喜欢

转载自blog.csdn.net/qq_40638497/article/details/81213660
今日推荐