java中类的加载过程是怎样的?它的类型存在实例展示。

BSO 2020-08-31 15:02:22 java常见问答 6818

在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工具网。

推荐阅读:

java网上购物程序包括哪几类?应该怎么编写?

java工厂模式属于mvc吗?怎么在mvc中实现?

java工厂模式详解,java工厂模式概念三种详解