Java面向对象基础4——内存图

简介: Java面向对象基础4——内存图

前言


本文将讲述Java面向对象编程中的内存原理


步骤


1.加载class文件

2.声明局部变量

3.在堆内存中开辟空间

4.默认初始化

5.显示初始化(仅在定义时有初始值才会有这个步骤)

6.构造方法初始化(如果是空参构造就没有这个步骤)

7.堆内存中地址值赋值给左边变量


一个对象的内存图——实例


public class Student{
  String name;
  int age;
  public void study(){
  System.out.println("好好学习,天天向上");
  }
}
public class TestStudent{
  public static void main(String[] args){
  Student s = new Student();
  System.out.println(s.name + " " +s.age);
  s.name = "张三";
  s.age = 20;
  System.out.println(s.name + " " +s.age);
  s.study();
  }
}


d22ef7a2a0c2460c8190991724f1bc88.jpg


两个对象的内存图——实例


public class Student{
  String name;
  int age;
  public void study(){
  System.out.println("好好学习,天天向上");
  }
}


public class TestStudent{
  public static void main(String[] args){
  Student s1 = new Student();
  System.out.println(s.name + " " +s.age);
  s.name = "张三";
  s.age = 20;
  System.out.println(s.name + " " +s.age);
  s.study();
  Student s2 = new Student();
  System.out.println(s.name + " " +s.age);
  s.name = "李四";
  s.age = 20;
  System.out.println(s.name + " " +s.age);
  s.study();
  }
}


582e062511fa4c22a1057293596e7a69.jpg


两个引用指向同一个对象——实例


与上述两个对象的内存图不同,堆内存只开辟了一个空间,s1和s2都指向那个新开辟的空间,如下图所示


81496f9d7d144fca8e8098d8a3d7f5cd.png


this关键字储存原理


5d51422c31744dc6ac75eecdb0e2a28d.png

94c7c515e689445da0d68e2c55ae1ebc.png

图源自黑马程序员


结语


知道存储原理便于理解方法是如何执行的,在写代码时也能避免一定错误,如果觉得看文字版讲解不够清楚的话,可以点击链接查看有关视频

相关文章
|
2月前
|
Java 大数据 Go
从混沌到秩序:Java共享内存模型如何通过显式约束驯服并发?
并发编程旨在混乱中建立秩序。本文对比Java共享内存模型与Golang消息传递模型,剖析显式同步与隐式因果的哲学差异,揭示happens-before等机制如何保障内存可见性与数据一致性,展现两大范式的深层分野。(238字)
74 4
|
2月前
|
存储 缓存 Java
【深入浅出】揭秘Java内存模型(JMM):并发编程的基石
本文深入解析Java内存模型(JMM),揭示synchronized与volatile的底层原理,剖析主内存与工作内存、可见性、有序性等核心概念,助你理解并发编程三大难题及Happens-Before、内存屏障等解决方案,掌握多线程编程基石。
|
3月前
|
Java
Java基础语法与面向对象
重载(Overload)指同一类中方法名相同、参数列表不同,与返回值无关;重写(Override)指子类重新实现父类方法,方法名和参数列表必须相同,返回类型兼容。重载发生在同类,重写发生在继承关系中。
150 1
|
3月前
|
安全 Java 应用服务中间件
Spring Boot + Java 21:内存减少 60%,启动速度提高 30% — 零代码
通过调整三个JVM和Spring Boot配置开关,无需重写代码即可显著优化Java应用性能:内存减少60%,启动速度提升30%。适用于所有在JVM上运行API的生产团队,低成本实现高效能。
297 3
|
3月前
|
存储 Java 关系型数据库
Java 项目实战基于面向对象思想的汽车租赁系统开发实例 汽车租赁系统 Java 面向对象项目实战
本文介绍基于Java面向对象编程的汽车租赁系统技术方案与应用实例,涵盖系统功能需求分析、类设计、数据库设计及具体代码实现,帮助开发者掌握Java在实际项目中的应用。
127 0
|
3月前
|
缓存 监控 Kubernetes
Java虚拟机内存溢出(Java Heap Space)问题处理方案
综上所述, 解决Java Heap Space溢出需从多角度综合施策; 包括但不限于配置调整、代码审查与优化以及系统设计层面改进; 同样也不能忽视运行期监控与预警设置之重要性; 及早发现潜在风险点并采取相应补救手段至关重要.
535 17
|
4月前
|
存储 监控 算法
Java垃圾回收机制(GC)与内存模型
本文主要讲述JVM的内存模型和基本调优机制。
|
4月前
|
存储 缓存 Java
Java数组全解析:一维、多维与内存模型
本文深入解析Java数组的内存布局与操作技巧,涵盖一维及多维数组的声明、初始化、内存模型,以及数组常见陷阱和性能优化。通过图文结合的方式帮助开发者彻底理解数组本质,并提供Arrays工具类的实用方法与面试高频问题解析,助你掌握数组核心知识,避免常见错误。
|
算法 Java 开发者
Java面试题:Java内存探秘与多线程并发实战,Java内存模型及分区:理解Java堆、栈、方法区等内存区域的作用,垃圾收集机制:掌握常见的垃圾收集算法及其优缺点
Java面试题:Java内存探秘与多线程并发实战,Java内存模型及分区:理解Java堆、栈、方法区等内存区域的作用,垃圾收集机制:掌握常见的垃圾收集算法及其优缺点
142 0
|
算法 Java
【Java 虚拟机原理】垃圾回收算法 ( Java 虚拟机内存分区 | 垃圾回收机制 | 引用计数器算法 | 引用计数循环引用弊端 )
【Java 虚拟机原理】垃圾回收算法 ( Java 虚拟机内存分区 | 垃圾回收机制 | 引用计数器算法 | 引用计数循环引用弊端 )
236 0