Java是一种动态解释型语言,类(class)只有被加载到JVM中后才能运行。每当一个Java程序运行时,都会有一个对应的JVM实例,只有当程序运行结束后,这个JVM才会退出。JVM实例通过调用类的main()方法来启动一个Java程序。当运行指定程序时,JVM将编译生成的.class文件按照需求和一定的规则加载到内存中,组织成一个完整的Java应用程序。
类的加载方式分为隐式加载和显式加载,隐式加载指的是程序在使用new等方式创建对象时,会隐式地调用类的加载器把对应的类加载到JVM中。显示加载指的是通过直接调用class.forName()方法来把所需的类加载到JVM中。

类的加载的主要步骤分为如下3步:
(1)装载,根据查找路径找到对应的class文件,然后导入
(2)链接,可以分为3小步:

a.检查,检查待加载的class文件的正确性
b.准备,给类中的静态变量分配存储空间
c.解析,将符号引用转换成直接引用

(3)初始化,对静态变量和静态代码块执行初始化工作
补充:对于将符号引用转换成直接引用:

在java中,一个java类将会编译成一个class文件。在编译时,java类并不知道引用类的实际内存地址,雅思报名因此只能使用符号引用来代替。比如org.simple.People类引用org.simple.Tool类,在编译时People类并不知道Tool类的实际内存地址,因此只能使用符号org.simple.Tool(假设)来表示Tool类的地址。而在类装载器装载People类时,此时可以通过虚拟机获取Tool类
的实际内存地址,因此便可以既将符号org.simple.Tool替换为Tool类的实际内存地址,及直接引用地址。

最新文章

  1. Scrum领取任务
  2. jquery combobox
  3. Cocos2d-x Application Wizard for Visual Studio User Guide
  4. SQL设置SQLServer最大连接数查询语句
  5. java面向对象编程——第五章 对象的行为
  6. UVA- 1504 - Genghis Khan the Conqueror(最小生成树-好题)
  7. Android 有趣味的GridView
  8. SVN同步出现故障
  9. L2,breakfast or lunch
  10. Ubuntu 16.04安装配置Samba服务
  11. c++学习笔记---05--- C++输出输入小结
  12. 使用locate 的正则查询 查找所有main.c
  13. (编辑距离问题 线性DP) nyoj1431-DNA基因鉴定
  14. git diff 理解
  15. DELL MD3200i存储控制器解锁方法
  16. DotNetty 学习
  17. Go语言之进阶篇TCP相互通信
  18. Go map中一个很重要的特性
  19. Intellij 2016非服务器激活
  20. 【Python入门总结】

热门文章

  1. dva的effect那么难用,自己造一个轮子吧
  2. 第四篇--Beyond Compare4 试用期30天后
  3. 简明易懂,将细节隐藏,面向新手树立web开发概念——学完Java基础语法,超快速上手springboot+mybatiJavaWeb开发
  4. C++ 2(将类分文件) //点和圆的关系 //设计一个圆形类 和一个点类 计算点和圆的关系 //点到圆心的距离 == 半径 点在圆上 //点到圆心的距离 > 半径 点在圆外 //点到圆心的距离 < 半径 点在圆内 //点到圆心的距离 获取 ....... (x1 -x2)^2 + (y1-y2)^2 开根号 和半径对比 // 计算 可以 两边同时 平方
  5. 收到字节月薪35k Offer,揭秘面试流程及考点
  6. 开源中国【面经】Java后台开发
  7. python爬虫:了解JS加密爬取网易云音乐
  8. S3C2440—2.裸机开发步骤及工具使用
  9. 当Atlas遇见Flink——Apache Atlas 2.2.0发布!
  10. docker部署minio