一、对象的实例化

1、创建对象的方式

2、创建对象的步骤

  脑图:https://www.processon.com/view/link/61701a927d9c087040525226

3、对象属性赋值的步骤

  ①属性的默认初始化——对应脑图中"创建对象的步骤"4
  ②显式初始化——对应脑图中"创建对象的步骤"6
  ③代码块中初始化——对应脑图中"创建对象的步骤"6
  ④构造器中初始化——对应脑图中"创建对象的步骤"6
  注意:②、③是并列的,执行顺序取决于在代码中的先后顺序。
  代码示例:演示②、③执行顺序

 1 public class Main {
2
3 {
4 // ③代码块中初始化: num = 200
5 num = 200;
6 }
7
8 // ①属性的默认初始化: num = 0
9 // ②显式初始化: num = 10
10 int num = 10;
11
12 public static void main(String[] args) {
13 Main m = new Main();
14
15 System.out.println(m.num); // 10
16 }
17 }
18
19
20 public class Main {
21
22 int num = 10;
23
24 {
25 num = 200;
26 }
27
28 public static void main(String[] args) {
29 Main m = new Main();
30
31 System.out.println(m.num); // 200
32 }
33 }

4、从字节码看对象实例化过程

二、对象的内存布局

1、对象头

2、实例数据

3、对齐填充

  脑图:https://www.processon.com/view/link/6170441d63768961e9dc38fc

  代码示例:演示对象内存布局

 1 public class Customer {
2 int id = 1001;
3 String name;
4 Account acct;
5
6 {
7 name = "匿名客户";
8 }
9
10 public Customer() {
11 acct = new Account();
12 }
13
14 }
15
16 class Account {
17
18 }
19
20 // 测试类
21 public class Main {
22 public static void main(String[] args) {
23 Customer cust = new Customer();
24 }
25 }

三、对象的访问定位

1、介绍

  Java虚拟机规范中,并没有明确的规定,采用哪种访问方式。Hotspot采用的是直接指针。
  脑图:https://www.processon.com/view/link/6170d2cf1e0853446e56c089

2、句柄访问

3、直接指针(Hotspot采用)

  注:个人感觉这里有点不对。这里的"对象实例数据"和上面图中的应该不是一回事,不然看起来好像实例数据里面包含了到对象类型数据的指针一样。这里应该叫"对象数据"比较合理一点。
  这个指针,应该是放在对象头里的。

最新文章

  1. [LeetCode] Walls and Gates 墙和门
  2. ARP协议学习
  3. MySQL functions, IF, CASE
  4. HDU 1077Catching Fish(简单计算几何)
  5. CF 294C(Java大数做计数)
  6. offsetParent和parentNode区别
  7. watch命令详解(linux)
  8. selenium C#下的zencart自动化测试(WFloginUrlPayment)环境4.0
  9. PHP GD库生成图片自动换行函数,自动分页函数
  10. 给定一个实数数组,按序排列(从小到大),从数组从找出若干个数,使得这若干个数的和与M最为接近,描述一个算法,并给出算法的复杂度。
  11. python5 数字类型 字符串类型 列表类型
  12. MVC过滤器使用方法
  13. bzoj千题计划318:bzoj1396: 识别子串(后缀自动机 + 线段树)
  14. 【BZOJ】3144: [Hnoi2013]切糕
  15. 浅谈table、form 标签
  16. python BeautifulSoup库用法总结
  17. VSCode环境
  18. sublime text3及插件安装过程
  19. Linux C 重定向简单范例
  20. 成都Uber优步司机奖励政策(2月25日)

热门文章

  1. Sentry-CLI 使用详解(2021 Sentry v21.8.x)
  2. 20210804 noip30
  3. Pytest系列(3) - setup和teardown的详细使用
  4. Jenkins(7)- 解决Linux下忘记Jenkins密码
  5. ABP 极简入门教程(二 MVC方式显示数据)
  6. 控制台:控制台艺术字 & 为控制台输出增加样式(console.log( ))
  7. 图的遍历BFS广度优先搜索
  8. MySql WorkBench通过表生成表关系图
  9. seo执行步骤
  10. Orchard Core 简介