JAVA动态加载类和静态加载类

1.JAVA动态加载类和静态加载类的区别

    new创建对象的方式称作为静态加载,而使用Class.forName("XXX")称作为动态加载,它们俩本质的区别在于静态加载的类的源程序在编译时期加载(必须存在),而动态加载的类在编译时期可以缺席(源程序不必存在)。

2.为什么需要动态加载类

   对于我自己的理解,动态加载类增加了程序的灵活性。比如一个程序中有50个功能,但你可能只会使用其中的一个,如果你用的是静态加载的方式,你必须在编译前提供100个功能的所有定义,否则无法编译通过,若你使用的是动态加载机制,则不需要如此大费周章,用哪一个就定义哪一个即可(后面会举例子)。

以下举例子说明动态加载类和静态加载类的区别以及动态加载类的用法和优点。

假设Test.java中程序如下:

public class Test{
	public static void main(String[] args){

		if("A".equals(args[0])){
			new A().print();
		}

		if("B".equals(args[0])){
			new B().print();
		}
	}
}
如果你不定义A类和B类,则会出现编译错误。

若你想程序能运行,必须定义A和B。

假想如下场景,Test中有100个功能,你只想使用A功能,如果你使用的是静态加载的机制,你必须定义其余的99种功能才能使用A功能,如果使用动态加载机制,不仅不用定义99中功能,通过实现某种标准(继承某个接口),将大大方便了代码的编写。

Test.java

public class Test{
	public static void main(String[] args){
		try{
		Class c = Class.forName(args[0]);
		MyStandard me =  (MyStandard)c.newInstance();
		me.print();
		}catch(Exception e){
			e.printStackTrace();
		}
	}
}
A.java

public class A implements MyStandard{
	public void print(){
		System.out.println("A");
	}
}
B.java

public class B implements MyStandard{
	public void print(){
		System.out.println("B");
	}
}
Mystandard.java

interface MyStandard{
	public void print();
}
使用命令行:

java Test A使用A功能

java Test B使用B功能

小伙伴们,是不是很方便呢,以上就是我对动态加载和静态加载的理解,比较浅显,哪位小伙伴发现我的错误或者有很多需要补充的,请私信我,万分感谢!


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值