Java类动态加载

1、静态类加载

说到动态加载,就得说说静态加载了。

下面就通过一个例子来说明静态加载的特点:

class Office{
	public static void main(String[] args){
		//new 创建对象 是静态加载类,
		//在编译时刻就需要加载所有可能使用到的类。
		//不管是否使用到
		//通过动态加载类可以解决该问题
		if("Word".equals(args[0])){
			Word w = new Word();
			w.start();
		}
		
		if("Excel".equals(args[0])){
			Excel e = new Excel();
			e.start();
		}
	}
}

编译

假如可能用到2个类,但是我们只想使用其中的某一个类Word,而不使用其他类。而在java代码编译成字节码.class文件的时候(静态编译),一旦哪个类没有,不管是否会用到,都会编译失败。

这样显然不是我们希望看到的效果。那现在很多产品的在线下载文件做增量更新是怎么做到的呢?

这就需要引入一个概念:动态加载

2、动态加载类

首先我们创建一个OfficeBetter.java的文件(对比上面Office.java)

这里需要对类的表示方式有个基本的了解:https://blog.csdn.net/stoneWang_L/article/details/90578180

class OfficeBetter{
	public static void main(String[] args){
		try{
			//动态加载类,在运行时加载
			Class c = Class.forName(args[0]);
			//通过类类型(class type)创建该类对象
			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 ... starts ...");
	}
}

 

这个时候,我们再编译,会报错么?

结果是不会的。只有当我们调用确定的类(Excel)时,如果该类不存在,那才会出现报错的情况。

这就是类的动态加载的一个简单的例子。

备注:该文章参考慕课Cedar老师的课程【反射——Java高级开发必须懂的】第二节

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值