java加载类 静态_java动态加载类和静态加载类

一.什么是动态加载类 什么是静态加载类

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();

}

}

}

编译:

10c3a91544601e13ea794d75947c127b.png

我们会发现,我们并不一定用到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();

}

39e999213765809417658654dbc2d5d5.png

39e999213765809417658654dbc2d5d5.png

39e999213765809417658654dbc2d5d5.png

39e999213765809417658654dbc2d5d5.png

39e999213765809417658654dbc2d5d5.png

39e999213765809417658654dbc2d5d5.png

39e999213765809417658654dbc2d5d5.png

总结:推荐大家使用动态加载类。原因如上,即节省了代码,又简洁方便,安全。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值