Java反射机制-动态加载类

在Java 中,有编译状态和运行状态
在编译状态加载的类称为静态加载类,在运行时刻加载的类称为动态加载类
动态加载类···,如何动态加载?
在引入这个问题前,我先说明一下,直接上图吧:
Java反射机制-动态加载类_第1张图片

Java反射机制-动态加载类_第2张图片
// 目前我车库里只有一台宝马车
Java反射机制-动态加载类_第3张图片
接着我去cmd编译
Java反射机制-动态加载类_第4张图片
你会发现,报错了,提示说找不到这个符号。很正常,因为确实没有Benchi这个类。
在Eclipse等等编译器中,根本就编译不过去,对吧? 很多人立刻就想到,加上这个类呀,不然肯定报错呀。
但是,有多少人会想: 为什么? 车库里没有奔驰车,我开宝马不行么??? 为什么现在连好好的宝马车都无法开 ??

我们是否得解决这问题? 没有奔驰车,但是宝马有呀,我能开吧??

PS: new 创建对象,是在编译时刻就创建的,因此编译时就要加载
如何解决? 这就可以用到java反射机制的动态加载类,在运行时刻才去加载:

我们创建Main2.java,换种方式去加载
Class c = Class.forName("类的全路径");
Java反射机制-动态加载类_第5张图片
接着继续编译一下
Java反射机制-动态加载类_第6张图片
可以发现,编译过去了,而且我们用Baoma的时候,也没问题,用Benchi时,才提示找不到这个类

在Class类篇,我们说过,可以通过类类型来创建类的实例对象(newInstance),因此,我们可以通过这个c,来创建想要的车, 但是,万一加载的是Baoma,但是创建的确实奔驰,怎么办?如何知道要创建什么车??

我们得创建一个车标准
这里,我们创建了一个Car标准
Java反射机制-动态加载类_第7张图片
所有的车,车库里的车必须符合这个标准, 例如宝马
Java反射机制-动态加载类_第8张图片
// 接着我们创建一辆车
Car car = (Car) c.newInstance();
car.run();

重新编译:
Java反射机制-动态加载类_第9张图片
看到没? 我们现在需要用宝马车,是不是可以了··

当然,现在还是用不了奔驰,因为车库里根本就没有,如果需要使用,我们只需找一个人去生产奔驰车即可。 如下:
Java反射机制-动态加载类_第10张图片

编译:
Java反射机制-动态加载类_第11张图片

完美
只要我们需要什么使用什么车,就去生产一台,就不会再出现,有一台车没有,其他车也不能开的情况了

PS: 这也是所谓的工厂设计模式

资源已上传:http://download.csdn.net/detail/jaky0306/9762046

完毕.......

你可能感兴趣的:(基础知识)