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

图源自黑马程序员


结语


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

相关文章
|
7天前
|
存储 Java 编译器
Java内存区域详解
Java内存区域详解
18 0
Java内存区域详解
|
14天前
|
搜索推荐 Java
Java的面向对象特性主要包括封装、继承和多态
【4月更文挑战第5天】Java的面向对象特性主要包括封装、继承和多态
13 3
|
17天前
|
缓存 算法 Java
Java内存管理与调优:释放应用潜能的关键
【4月更文挑战第2天】Java内存管理关乎性能与稳定性。理解JVM内存结构,如堆和栈,是优化基础。内存泄漏是常见问题,需谨慎管理对象生命周期,并使用工具如VisualVM检测。有效字符串处理、选择合适数据结构和算法能提升效率。垃圾回收自动回收内存,但策略调整影响性能,如选择不同类型的垃圾回收器。其他优化包括调整堆大小、使用对象池和缓存。掌握这些技巧,开发者能优化应用,提升系统性能。
|
13天前
|
缓存 安全 Java
Java并发编程进阶:深入理解Java内存模型
【4月更文挑战第6天】Java内存模型(JMM)是多线程编程的关键,定义了线程间共享变量读写的规则,确保数据一致性和可见性。主要包括原子性、可见性和有序性三大特性。Happens-Before原则规定操作顺序,内存屏障和锁则保障这些原则的实施。理解JMM和相关机制对于编写线程安全、高性能的Java并发程序至关重要。
|
21天前
|
缓存 Java C#
【JVM故障问题排查心得】「Java技术体系方向」Java虚拟机内存优化之虚拟机参数调优原理介绍(一)
【JVM故障问题排查心得】「Java技术体系方向」Java虚拟机内存优化之虚拟机参数调优原理介绍
60 0
|
3天前
|
存储 Java
Java基础教程(7)-Java中的面向对象和类
【4月更文挑战第7天】Java是面向对象编程(OOP)语言,强调将事务抽象成对象。面向对象与面向过程的区别在于,前者通过对象间的交互解决问题,后者按步骤顺序执行。类是对象的模板,对象是类的实例。创建类使用`class`关键字,对象通过`new`运算符动态分配内存。方法包括构造函数和一般方法,构造函数用于对象初始化,一般方法处理逻辑。方法可以有0个或多个参数,可变参数用`类型...`定义。`this`关键字用于访问当前对象的属性。
|
3天前
|
存储 缓存 监控
Java内存管理:垃圾回收与内存泄漏
【4月更文挑战第16天】本文探讨了Java的内存管理机制,重点在于垃圾回收和内存泄漏。垃圾回收通过标记-清除过程回收无用对象,Java提供了多种GC类型,如Serial、Parallel、CMS和G1。内存泄漏导致内存无法释放,常见原因包括静态集合、监听器、内部类、未关闭资源和缓存。内存泄漏影响性能,可能导致应用崩溃。避免内存泄漏的策略包括代码审查、使用分析工具、合理设计和及时释放资源。理解这些原理对开发高性能Java应用至关重要。
|
7天前
|
存储 Java 编译器
对象的交响曲:深入理解Java面向对象的绝妙之处
对象的交响曲:深入理解Java面向对象的绝妙之处
36 0
对象的交响曲:深入理解Java面向对象的绝妙之处
|
11天前
|
存储 缓存 安全
【企业级理解】高效并发之Java内存模型
【企业级理解】高效并发之Java内存模型
|
17天前
|
搜索推荐 Java
Java基础(快速排序算法)
Java基础(快速排序算法)
22 4