一.什么是动态加载类 什么是静态加载类
Class.forName 不仅表示类的类类型,还代表了动态加载类。编译时加载是静态加载类,
运行时加载是动态加载类。
请大家区分编译 运行。
二.为何要使用动态加载类
我们写了一个程序 并没有写A类和B类以及start方法
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功能,可是编译却不能通过。而在日常的项目中,如果我们写了100个功能,因为一个功能的原因而导致所有功能不能使用,明显使我们不希望的。在这里,为什么会在编译时报错呢?new 是静态加载类,在编译时刻就需要加载所有可能使用到的功能。所以会报错。而在日常中我们希望用到哪个就加载哪个,不用不加载,就需要动态加载类。
使用动态加载类时,我们不用定义100种功能,只需要通过实现某种标准(实现某个接口)。
代码:
public class Main{
    public static void main(String args[]){
        try{
            
            Class c=Class.forName(args[0]);
        
            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();
}
总结:推荐大家使用动态加载类。原因如上,即节省了代码,又简洁方便,安全。
 
  
  
  
  
 