公司想建个网站怎么弄,idc机房建设,wordpress diyzhan,教务系统管理阅读本文约需要8分钟 大家好#xff0c;我是你们的导师#xff0c;经常看我朋友圈的同学应该知道#xff0c;我每天会在微信上给大家免费提供以下服务#xff01;1、长期为你提供最优质的学习资源#xff01;2、给你解决技术问题#xff01;3、每天在朋友圈里分享优质的技… 阅读本文约需要8分钟 大家好我是你们的导师经常看我朋友圈的同学应该知道我每天会在微信上给大家免费提供以下服务1、长期为你提供最优质的学习资源2、给你解决技术问题3、每天在朋友圈里分享优质的技术文章4、每周1、3、5送纸质书籍免费送给大家每年至少送书800本书5、为大家推荐靠谱的就业单位请注意我上面说的5点全部都是免费的全网你应该找不到第二家吧当然大家在我私人微信上问我问题仅限回答web前端、java相关的。---------------------------好了接下来开始今天的技术分享上次老师跟大家分享了ArrayList底层原理及实现的知识今天跟大家分享下Java类加载的过程的知识。1 类的生命期当程序要使用某个类时如果该类还未被加载到内存中则系统会通过加载连接初始化三步来实现这个类进行初始化。可以看到类的生命周期包含了加载、验证、准备、解析、初始化、使用、卸载七个步骤其中验证、准备和解析可以叫做一步连接。其中类的加载过程是前面的3步加载、验证、准备、解析和初始化。1. 加载加载是指Java虚拟机查找字节流(查找.class文件)并且根据字节流创建java.lang.Class对象的过程。这个过程将类的.class文件中的二进制数据读入内存放在运行时区域的方法区内。然后在堆中创建java.lang.Class对象用来封装类在方法区的数据结构。类加载阶段(1)Java虚拟机将.class文件读入内存并为之创建一个Class对象。(2)任何类被使用时系统都会为其创建一个且仅有一个Class对象。(3)这个Class对象描述了这个类创建出来的对象的所有信息比如有哪些构造方法都有哪些成员方法都有哪些成员变量等。Student类加载过程图示2.链接链接包括验证、准备以及解析三个阶段。(1)验证阶段。主要的目的是确保被加载的类(.class文件的字节流)满足Java虚拟机规范不会造成安全错误。(2)准备阶段。负责为类的静态成员分配内存并设置默认初始值。(3)解析阶段。将类的二进制数据中的符号引用替换为直接引用。说明符号引用。即一个字符串但是这个字符串给出了一些能够唯一性识别一个方法一个变量一个类的相关信息。直接引用。可以理解为一个内存地址或者一个偏移量。比如类方法类变量的直接引用是指向方法区的指针而实例方法实例变量的直接引用则是从实例的头指针开始算起到这个实例变量位置的偏移量。举个例子来说现在调用方法hello()这个方法的地址是0xaabbccdd那么hello就是符号引用0xaabbccdd就是直接引用。在解析阶段虚拟机会把所有的类名方法名字段名这些符号引用替换为具体的内存地址或偏移量也就是直接引用。3.初始化初始化则是为标记为常量值的字段赋值的过程。换句话说只对static修饰的变量或语句块进行初始化。如果初始化一个类的时候其父类尚未初始化则优先初始化其父类。如果同时包含多个静态变量和静态代码块则按照自上而下的顺序依次执行。2 对象的初始化顺序首先对象初始化会有几个东西构造函数构造代码块静态代码块静态变量对于构造函数构造函数只会初始化一次用来初始化对象构造方法只会调用一次对象的方法可以重复调用对于构造方法块同构造方法一样只会在new的时候执行一次也是用来初始化对象的对于静态代码块是给类进行初始化的只会在类初始化的时候执行一次对于静态变量也只会在类初始化的时候初始化一次。对于一个类这几个的顺序如下静态变量和代码块优先于构造代码块优先于构造函数。对于有继承的情况这几个的顺序如下,父类静态变量、代码块优先于自雷静态变量、代码块优先于父类变量、构造代码块、构造方法优先于子类变量、构造代码块、构造方法。3 类加载器类加载器用于实现类的加载java中分为了三种类加载器启动类加载器拓展类加载器应用程序类加载器其中启动类加载器是由C编写用于加载JAVA_HOME\lib目录下的类也就是我们用到的基本的像String什么的都是这个加载器加载的。然后是拓展类加载器是用于加载JAVA_HOME\lib\ext中的类这个目录下的类不常用到最后应用程序类加载器是加载用户自己实现的类。接下来介绍下类加载器的双亲委派模型图示双亲委派模型体现了类加载器之间的层次模型除了启动类加载器外每个加载器都有自己的父加载器工作过程如下:如果类加载器收到了类加载的请求那么会将这个请求一层一层的传递到父加载器中当父加载器反馈自己不能加载的时候才会有这个加载器加载这样的好处是避免一个类被多个加载器重复加载并且由于不同加载器加载的类是不一样的导致程序混乱。4 总结类加载过程只是一个类生命周期的一部分在其前有编译的过程只有对源代码编译之后才能获得能够被虚拟机加载的字节码文件在其后还有具体的类使用过程当使用完成之后还会在方法区垃圾回收的过程中进行卸载(垃圾回收)。今天就分享这么多关于Java类加载的过程你学会了多少欢迎在留言区评论对于有价值的留言我们都会一一回复的。如果觉得文章对你有一丢丢帮助请点右下角【在看】让更多人看到该文章。