类的加载和对象的创建过程

类的加载:

类的加载路线差不多是这样的:

加载->链接(验证->准备->解析)->初始化->使用->卸载

加载:会根据类是否有条件加载进行加载。一般分为五个条件:1.使用new,调用了类static变量或者是方法  2.使用反射   3.一个类初始化时先初始化其父类  4.运行主类(main)   5.动态语言

有几个情况不会加载:调用父类的static变量或方法,子类不会加载;被动引用不会加载如(Student[] j=new Student[10]);虽然是静态但是用final修饰的常量不加载该类

加载后:通过全限名(包名+类名)找到该类获取其二进制文件  ->  将二进制文件变为方法区中的数据结构 -> 生成一个代表此类的class文件 作为访问入口

链接:验证其是否为java识别文件,并对数据类型等进行检验;为类数据进行内存分配并赋初始值;把符号引用变为直接引用

初始化:初始化过程是执行类构造器<clinit>的执行过程。它会为静态变量赋值,并执行静态代码块。该过程是一个同步过程,单例模式就是利用其特点,在这个过程中创建对象

具体见《深入虚拟机》


对象的创建过程:

1.对象创建时,虚拟机会在堆中给类的实例变量和从父类继承的实例变量分配内存,并且默认初始值

2.执行实例变量和实例代码块

3.执行构造函数

重点讲一下构造函数:

在执行构造函数的时候,先要执行超类的构造函数。知道到达object再返回。


几个题

https://blog.csdn.net/justloveyou_/article/details/72466416

https://blog.csdn.net/justloveyou_/article/details/72466105

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,135评论 1 32
  • 最近状态越来越差,我有那么一瞬间,会感觉到为何有的创作者会经常会抑郁,因为我在回忆往事的时候,总会带着莫名的悲伤...
    Ldzhao阅读 356评论 3 1
  • 雨是大地的一味良药 安抚轻浮的尘土 冒失的鲜花 以及张牙舞爪的大树 还有蠢蠢欲动的狂躁灵魂 雨还是一盏清酒 你看雨...
    五三追梦人美玲阅读 393评论 1 4
  • 狂风来袭吹落我扬起的帆 本以为我会消失在深海 却不想我冲出了迷雾 欢呼吧 庆幸吧 夜幕降临时却听到了内心的哭喊 因...
    染青纱阅读 216评论 0 5
  • 近日每每想起周末补考国贸,吾心甚哀,痛哭流泪(熬夜伤眼),涕泗横流(感冒了),悔不当初(交白卷),遂作此文。 今有...
    小二不2阅读 476评论 8 2