java动态加载类

//new创建对象是静态加载类,在编译时刻就需要加载所有的可能用到的类。而通过动态加载类可以解决此问题

class office{
    
    public static void main(String[] args){
        
        if("word".equals(args[0])){
            Word word=    new Word();
            word.start();        
        }
        if("excel".equals(args[0])){
            Excel excel=new Excel();
            excel.start();
            
        }
        
    }
}



//以上代码在编译时就会报错,因为找不到Word类和Excel类以及其各自的 start()方法.

//若存在一个Word类,我们编译器还是不会通过编译,因为它会报没有Exce这个类l


class Word {
    
    public void start(){
        System.out.println("java-word");
    }
}


//而现在我们想的是,因为有word类已经存在,当我们传的参数是Word时想让程序执行下去,输出相应得内容,显然采用上面静态加载类的方式是不可能实现的,这时候就需要采用动态加载类的方式。如下

class officeBetter{

public static void main(String[] args){
try{

//采用Class.forName(args[0])此种方式

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

//使用c.newInstance();实例化对象返回的是相应得对象,因为如果传入的命令行参数是Word的话,实例化的就是Word对象,而如果传入的是Excel,则实例化的对象就是Excel对象,所以此时返回的实例对象不能确定,那么这种情况就应该用一个公用的类,然后让Word类和Excel类实现接口自然就可以根据动态传入的命令行参数,实例化相应得对象了。

officeAble a=(officeAble)c.newInstance();
a.start();
}catch(Exception e){
e.printStackTrace();
}
}
}



Word类:

class Word implements officeAble{
    
    public void start(){
        System.out.println("java-word");
    }
}


Excel类:

class Excel implements officeAble{

public void start(){
System.out.println("excel-start");
}

}


//如此以来程序也会变得比较耦合,也很容易扩展,如果再有一个其他的ppt类,就很容易实现了,只要ppt类实现officeAble接口,然后重写其中的方法即可。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值