在java编程语言应用越来越广泛的今时今日,越来越多的有志之士开始主动接触这门技术。今天就为大家介绍一下java中类的加载过程是怎样的,以及通过一个实例向大家展示它的类型存在。
首先,我们把类的加载分为三个部分:装载、连接、初始化三个过程。装载的含义是将类作为二进制流读到内存中;然后连接是将二进制流转换成类对象(class对象),并加载初始化类所需要的资源; 最后初始化是初始化类变量或执行static静态块,并为类对象(Class的实例)分配内存空间。
接下来为大家简单说一下Class和ClassLoader,方便更好理解下面即将要展示的实例。
1.java类加载器是以java.lang.ClassLoader类型存在的。每一个类被加载后,都会有一个Class的实例来代表,而每个Class的实例都会记得自己是由哪个ClassLoader加载的;2.可以通过Class的getClassLoader()取得加载该类的ClassLoader。3.可以通过ClassLoader的getParent()取得自己的parent, 注意:返回null并不代表没有parent,因为Bootstrap Loader是用C语言编写的,所以没有一个实际的类来表示它; 4.可以通过ClassLoader的loadClass()加载类。这时不会立即运行静态块,会等到创建类的实例时才会运行。
代码示例如下:
public class Work3 { /* * @x x * @x x x * */ public static void main(String[] args) { Class clz; ClassLoader cl, cl1; System.out.println("1------------------"); // 得到系统类加载器 cl = ClassLoader.getSystemClassLoader(); System.out.println(cl); // 输出其父加载器 while (cl != null) { cl1 = cl; cl = cl1.getParent(); System.out.println(cl1 + "的父加载器是:" + cl); } System.out.println("2------------------"); try { clz = Class.forName("java.lang.Object"); cl = clz.getClassLoader(); System.out.println("加载Object类的类加载器是:" + cl); } catch (ClassNotFoundException e) { e.printStackTrace(); } System.out.println("3------------------"); clz = Work3.class; cl = clz.getClassLoader(); System.out.println("加载当前类的类加载器是:" + cl); } }
上文就是有关于java中类的加载过程解析,以及它的类型存在实例展示。想要了解更多java常见问题,敬请关注奇Q工具网。
推荐阅读: