类加载过程:

1, JVM会先去方法区中找有没有相应类的.class存在。如果有,就直接使用;如果没有,则把相关类的.class加载到方法区

2, 在.class加载到方法区时,会分为两部分加载:先加载非静态内容,再加载静态内容

3, 加载非静态内容:把.class中的所有非静态内容加载到方法区下的非静态区域内

4, 加载静态内容:

4.1、把.class中的所有静态内容加载到方法区下的静态区域内

4.2、静态内容加载完成之后,对所有的静态变量进行默认初始化

4.3、所有的静态变量默认初始化完成之后,再进行显式初始化

4.4、当静态区域下的所有静态变量显式初始化完后,执行静态代码块

5,当静态区域下的静态代码块,执行完之后,整个类的加载就完成了。

对象创建过程:

1, 在堆内存中开辟一块空间

2, 给开辟空间分配一个地址

3, 把对象的所有非静态成员加载到所开辟的空间下

4, 所有的非静态成员加载完成之后,对所有非静态成员变量进行默认初始化

5, 所有非静态成员变量默认初始化完成之后,调用构造函数

6, 在构造函数入栈执行时,分为两部分:先执行构造函数中的隐式三步,再执行构造函数中书写的代码

6.1、隐式三步:

1,执行super语句

2,对开辟空间下的所有非静态成员变量进行显式初始化

3,执行构造代码块

6.2、在隐式三步执行完之后,执行构造函数中书写的代码

7,在整个构造函数执行完并弹栈后,把空间分配的地址赋值给一个引用对象

总结类中能书写的成员

栈: 用来运行函数。可以存储局部信息

特点:先进后出

堆:用来存储实体(被new创建出来的)。

特点:

1,  每一个实体所开辟的空间都有一个地址

2,  每一个实体中存储的数据都有一个默认初始值

方法区:存放class和static。 方法区其实是由N多个小的区域构成。有存放非静态内容的非静态区域,还有存放静态内容的静态区域,还有存放常量的常量池 等

class  ABC

{

非静态成员变量

静态成员变量

非静态成员函数

静态成员函数

构造函数:ABC(...){...}

静态代码块: static {...}

构造代码块 :  {...}

}

图解调用过程:

对象创建过程代码和注释:

  1. class Person {
  2. int age;
  3. Person(int age) {
  4. this.age = age;
  5. }
  6. }
  7. class Student extends Person {
  8. // 2,对开辟空间下的所有非静态成员变量进行显式初始化
  9. String school = "abc";
  10. Student(String school, int age) {
  11. // 1,执行super语句
  12. super(age);
  13. // 4、在隐式三步执行完之后,执行构造函数中书写的代码
  14. this.school = school;
  15. }
  16. {
  17. // 3,执行构造代码块
  18. System.out.println("Student code block");
  19. }
  20. }

Java中类加载过程和对象创建过程的更多相关文章

  1. Java中对象创建过程

    本文介绍的对象创建过程仅限于普通Java对象,不包括数组和Class对象. 1.类加载检查 虚拟机遇到一条new指令时,首先去检查该指令的参数能否在常量池中定位到一个类的符号引用,并且检查这个符号引用 ...

  2. java基础---类加载和对象创建过程

    类中可以存在的成员: class A{ 静态成员变量: 非静态成员变量: 静态函数: 非静态函数: 构造函数 A(..){...} 静态代码块 static{...} 构造代码块 {...} } 类加 ...

  3. java类加载、对象创建过程

    类加载过程: 1, JVM会先去方法区中找有没有相应类的.class存在.如果有,就直接使用:如果没有,则把相关类的.class加载到方法区 2, 在.class加载到方法区时,会分为两部分加载:先加 ...

  4. COM对象创建过程

    在客户端需要调用COM组件时,通常调用windowAPI函数: STDAPI CoCreateInstance( REFCLSID rclsid, //创建的Com对象的类标识符(CLSID) LPU ...

  5. 【JAVA零基础入门系列】Day11 Java中的类和对象

    今天要说的是Java中两个非常重要的概念--类和对象. 什么是类,什么又是对象呢?类是对特定集合的概括描述,比如,人,这个类,外观特征上,有名字,有年龄,能说话,能吃饭等等,这是我们作为人类的相同特征 ...

  6. 深入理解Java中的不可变对象

    深入理解Java中的不可变对象 不可变对象想必大部分朋友都不陌生,大家在平时写代码的过程中100%会使用到不可变对象,比如最常见的String对象.包装器对象等,那么到底为何Java语言要这么设计,真 ...

  7. java 中类加载器

    jar 运行过程和类加载机制有关,而类加载机制又和我们自定义的类加载器有关,现在我们先来了解一下双亲委派模式. java 中类加载器分为三个: BootstrapClassLoader 负责加载 ${ ...

  8. Java程序设计基础笔记 • 【第7章 Java中的类和对象】

    全部章节   >>>> 本章目录 7.1 理解类和对象 7.1.1 对象 7.1.2 抽象与类 7.1.3 类与对象的关系: 7.2 Java中的类和对象 7.2.1 类的定义 ...

  9. Java学习笔记十三:Java中的类和对象

    Java中的类和对象 一:什么是对象: 总的来说就是"万物皆对象",客观存在的事物皆为对象.是计算机所关注的具体信息. 对象(object)是一件事.一个物体.一个名词,或可以获得 ...

随机推荐

  1. C# 读取sqlite文件

    class Program { static void Main(string[] args) { getsqliteData(); } public static void getsqliteDat ...

  2. Sublime Text 3 快捷键总结(拿走)

    以下是个人总结不完全的快捷键总汇,祝愿各位顺利解放自己的鼠标. 选择类 Ctrl+D 选中光标所占的文本,继续操作则会选中下一个相同的文本. Alt+F3 选中文本按下快捷键,即可一次性选择全部的相同 ...

  3. TypeScipt学习

    TypeScript具有类型系统,且是JavaScript的超集.它可以编译成普通的JavaScript代码. TypeScript支持任意浏览器,任意环境,任意系统并且是开源的.Ts主要用于解决那些 ...

  4. java数组知识点总结

    数组是一个用来存储同一个数据类型多个元素的一个容器(数组长度是固定的,数组中存储的元素的数据类型要求一致) 1.格式: 格式1: 数据类型[] 数组名 = new 数据类型[数组长度]; 格式2: 数 ...

  5. 【bzoj4811】[Ynoi2017]由乃的OJ 树链剖分+线段树区间合并

    题解: 好像和noi那题并没有什么区别 只是加上了修改和变成树上 比较显然我们可以用树链剖分来维护

  6. 【CF809D】Hitchhiking in the Baltic States

    题意: 给你n个区间[li,ri],让你选出从中一个子序列,然后在子序列的每个区间里都选择一个tj,满足t1<t2<...<tlent1<t2<...<tlen.最 ...

  7. 【Android】LMK 工作机制

    Android分析之LowMemoryKiller Android Kernel 会定时执行一次检查,杀死一些进程,释放掉内存. 那么,如何来判断,那些进程是需要杀死的呢?答案就是我们的标题:Low ...

  8. Mongodb查询提示com.MongoDB.MongoException: too much data for sort() with no index

    解决办法: 查询数据量太大,添加索引即可解决问题 通过scrapy爬行完数据后,通过db.wooyun.drops.ensureIndex({"datetime":1})

  9. UOJ#62. 【UR #5】怎样跑得更快 数论 莫比乌斯反演

    原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ62.html 题解 太久没更博客了,该拯救我的博客了. $$\sum_{1\leq j \leq n} \ ...

  10. UOJ#33. 【UR #2】树上GCD 点分治 莫比乌斯反演

    原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ33.html 题解 首先我们把问题转化成处理一个数组 ans ,其中 ans[i] 表示 d(u,a) 和 ...