博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
类加载过程和对象创建过程
阅读量:5037 次
发布时间:2019-06-12

本文共 951 字,大约阅读时间需要 3 分钟。

1.类加载过程

  首先,jvm在执行时,遇到一个新的类时,会到内存中的方法区去找class文件,如果找到就直接拿来用,
如果没有找到,就会到硬盘中去找到这个class文件,将类文件加载到方法区,在类加载时,静态成员变量加载
到方法区的静态区域,非静态成员变量加载到方法区的非静态区域,加载静态成员变量的时候,会根据书写的顺序,
将所有的静态成员变量加载到静态方法区,然后给所有的静态成员变量赋默认值,赋默认值后,会根据静态成员
变量书写的位置,给静态成员变量赋显示值,和执行静态代码。当执行完所有的静态代码块时,类才算加载完成。

类加载过程:

1.JVM会先去方法区中找有没有相应类的.class存在。如果有,就直接使用;如果没有,则把相关类的.class加载到方法区。
2.在.class加载到方法区时,会分为两部分加载:先加载非静态内容,在加载静态内容。
3.在加载非静态内容:把.class中的所有非静态内容加载到方法区下的非静态区域内
4.加载静态内容:
   4.1把.class中所有静态内容加载到方法区下的静态区域内。
   4.2静态内容加载完成之后,对所有的静态变量进行默认初始化。
   4.3所有的静态变量默认初始化完成之后,再进行显示初始化。
   4.4当静态区域下的所有静态变量显示初始化完后,执行静态代码块。
5.当静态区域下的静态代码块,执行完之后,整个类的加载就完成了。

2.对象创建过程:

1.在堆内存中开辟一块空间。
2.给开辟空间分配一个地址。
3.把对象的所有非静态成员加载到所开辟的空间下。
4.所有的非静态成员加载完成之后,对所有非静态成员变量进行默认初始化。
5.所有非静态成员变量默认初始化完成之后,调用构造函数。
6.在构造函数入栈执行时,分为两部分:先执行构造函数中的隐式三步,在执行构造函数中书写的代码。
   6.1隐式三步:
  1.执行super语句
  2.对开辟空间下的所有非静态成员变量进行显示初始化
  3.执行构造代码块
 6.2在隐式三步执行完之后,执行构造函数中书写的代码
7.在整个构造函数执行完并弹栈后,把空间分配的地址赋值给一个引用对象

 

转载于:https://www.cnblogs.com/huangjinyong/p/9772685.html

你可能感兴趣的文章
最长英语单词链
查看>>
iOS界面跳转
查看>>
hibernate初学感触
查看>>
【基础】栈和堆的区别
查看>>
棋盘制作
查看>>
global name 'validate_on_submit' is not defined错误
查看>>
叫卖集体土地版“公租房 ” (zz)
查看>>
javascript array操作
查看>>
[AWDwR4] Getting AJAX to work in Rails 3 with jQuery
查看>>
CentOS 安装配置TFTP
查看>>
VMware中ubuntu忘记密码的解决办法
查看>>
navicat for mysql快捷键
查看>>
OI再见
查看>>
自定义单选框或者复选框
查看>>
xml知识点
查看>>
隐式类型转换
查看>>
目前国内几大著名报表软件(2014更新)
查看>>
我想要得那块牌—记烟台大学第一届"ACM讲堂"
查看>>
【LaTeX排版】LaTeX论文模版
查看>>
事务管理
查看>>