Java的反射机制之动态加载类和静态加载类

一、什么是动态加载类?什么又是静态的加载类?

Class.forName 不仅表示类的类型,还代表了动态加载类。编译时加载是静态加载类,运行时加载是动态加载类。

也就是说,new 是静态加载类,在编译时刻就需要加载所有可能使用到的功能,如果该类不存在,编译将不会通过,就会报错。而在日常中我们希望用到哪个就加载哪个,不用不加载,即使有的类不存在编译也会通过,就需要动态加载类。

二、举例

1、静态加载类举例

public class Main{  
    public static void main(String args[]){  
        if("A".equals(args[0])){  
            A a=new A();  
            a.start();  
        }  
        if("B".equals(args[0])){  
            B b=new B();  
            b.start();  
        }  
    }  
}  

 上述代码中,并没有写A类和B类及它们的start()。在编译的时候就会报错。

2、动态加载类举例(有时也叫动态代理)

public class Main{  
    public static void main(String args[]){  
        try{  
              
            Class c=Class.forName(args[0]);  //代表所有的类,即所有的类都是class类的实例
          
            All a=(All)c.newInstance();  //代表所有类的一个实例,这里使用了多态
            a.start();  
        }catch(Exception e){  
            e.printStackTrace();  
        }  
    }  
}  
class A implements All{  
    public void start(){  
        System.out.println("A....START");  
    }  
}  
class B implements All{  
    public void start(){  
        System.out.println("B....START");  
    }  
}  
//接口  
interface All{  
    public void start();  
}  

 上述代码中,并没有像静态加载类那样在main()方法中,通过new关键字创建所有类的具体对象(即并没有指定我们需要实现的对象是属于哪些类的),也就不可能出现,若类不存在而编译失败的问题了。在运行程序时,需要哪个类的对象就动态的创建哪个类的对象,也就是说动态的实现了类的加载。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值