读书人

Java背地的秘密之Java的类装载器03

发布时间: 2012-09-17 12:06:51 作者: rapoo

Java背后的秘密之Java的类装载器03

Java语言是一种先天具备动态性的语言,之所以具备动态性正是因为Java类装载器的存在。这会给我们开发带来革命性的变革,因为我们有可能开发出有弹性、易扩展的程序。从而大大增强我们程序的可维护性。按载入条件分为预先载入与按需载入。
1.通常基础类库需要预先载入。(常驻内存)
2.自定义类库需要按需载入。(使用时载入,使用完毕时由垃圾收集器负责释放)

类装载器运行模式分为两种,如下图:

Java背地的秘密之Java的类装载器031.使用new关键字来隐式加载,首先来看一个例子:直接上代码,很简单的三个类。
但是我们如果需要看类加载的详细内容,我们就要用到这条命令:java -verbose:class Main
Java背地的秘密之Java的类装载器03
Java背地的秘密之Java的类装载器03
看看上图是不是首先载入的Java的基础类库,看最后几行,首先加载Main,接下来实例化A类的时候会加载A,调用a.print()的时候打印了Using class A,然后加载B类,执行B中的方法。

2.使用Class.forName()方法载入类,这个做过J2EE开发的应该知道,在数据库连接加载驱动的时候都可以这么加载。还是看一个简单的例子:

Java背地的秘密之Java的类装载器03
详细观察一下最后几行载入的顺序,看看是否跟我们程序执行的是一样的呢?
此处有一个结论:Java类装载器会按照继承体系从上至下的依次载入类,直到所有的祖先类都载入(上例中是接口),才轮到自己;相反,在Java类对象实例被收集释放时,顺序与载入相反。由此,我们也能看出,Java类的继承体系不宜过长,因为那样会使类的载入与释放的性能受到影响。

3.直接使用类装载器ClassLoader,例子是上一个例子的改版,只是修改了Main.java,其他三个类不变。

Java背地的秘密之Java的类装载器03

怎么样,Java语言够动态吧。


本文出自 “火 山 哥” 的博客,未经授权,谢绝转载!


读书人网 >移动开发

热点推荐