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类需要继承同一个父类或者继承同一个接口)。