您的位置:首页 > 其它

静态加载与动态加载

2015-10-30 23:30 204 查看
创建Office,使用javac命令进行编译,会报错Word和Office找不到符号,如果我们创建了Word类,对Word使用javac进行编译,然后对Office进行编译,发现只报Excel找不到的错误。假设我们只想用Word的功能,程序没法使用。用不了的原因是,因为程序是做类的静态加载,在编译时刻就需要加载所有的可能使用到的类。在实际应用中,我们希望word存在,word就能用,用excel的时候才报错。这就是编译时刻加载导致的,new都是编译时刻加载。

class Office{
public static void main(String[] args){
//new 创建对象 是静态加载类,在编译时刻就需要加载所有的可能使用到的类。
if("Word".equals(args[0])){
Word word = new Word();
word.start();
}
if("Excel".equals(args[0])){
Excel excel = new Excel();
excel.start();
}
}
}


通过动态加载可以解决该问题,在编译的时候,不会报错,只有在运行的时候才有可能报错。创建OfficeAble标准,Word和Office都实现这个接口,防止出现类型转换错误。现在使用java OfficeBetter Word,可以运行Word的方法,如果想运行Excel,只需要实现Excel这个类就行了,然后,OfficeBetter这个类不需要重新编译,直接运行即可。以后添加其他Office的实现,OfficeBetter这个类都不需要修改,只需要动态的加新的功能就可以了。功能性的类一般都使用动态加载,而不是静态加载。

class OfficeBetter{
public static void main(String[] args){
try{
//动态加载类,在运行时刻,编译时不会报错
Class c = Class.forName(args[0]);
//通过类类型创建对象,创建该类对象
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 start");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  动态加载