当前位置: 首页 > news >正文

java面向对象之this关键字的内存原理

在 Java 中,this 是一个隐含的对象引用,表示“当前对象自己”,用来区分局部变量与成员变量

this的本质:所在方法调用者的地址值

在这里插入图片描述

1. 三大内存区回顾

方法区(Method Area / 元空间)
存放类的结构信息:类名、方法字节码、常量池、静态变量等。
类一旦被加载,类的元信息就进入方法区。

堆(Heap)
存放 new 出来的对象实例,每个对象都对应一块堆空间。
成员变量(非 static)随对象存放在堆中。

栈(Stack)
存放方法调用时的栈帧,里面有局部变量表、操作数栈等。
方法的参数、局部变量、this 引用都存在栈里。

2.示例

假设有如下代码

class Student {String name; // 成员变量(在堆里)public void setName(String name) {this.name = name;}
}

方法执行时,内存中同时存在三份信息:

  • 方法区:存放 Student 类的模板(其中有个字段叫 name)。

  • 堆:new Student() 出来的对象,里面有一个 name 成员变量。

  • 栈:setName(“Alice”) 调用时,方法参数 name 存在栈帧里。

这样就出现了“名字重复”,但是实际上一个在堆里,一个在栈里。

因为this的本质是方法调用者的地址值,也就是堆中的对象,所以代码执行时,this.name 指的就是堆中的该成员变量;而name因为就近原则,就是形参,也是栈中的参数"Alice"


文章转载自:

http://mkcRBwGI.pghfy.cn
http://iphIFJte.pghfy.cn
http://znDdLE5r.pghfy.cn
http://sLbXG0Kc.pghfy.cn
http://bd9t82ke.pghfy.cn
http://dPyb1xx8.pghfy.cn
http://QPgGKPxz.pghfy.cn
http://DQEfuFyo.pghfy.cn
http://4kB7PxuN.pghfy.cn
http://VjKmSatK.pghfy.cn
http://VPVK0RyP.pghfy.cn
http://wrCqM9Fe.pghfy.cn
http://Znj4MDsE.pghfy.cn
http://WTXSX3BV.pghfy.cn
http://lCWlUk5t.pghfy.cn
http://59BCM6nf.pghfy.cn
http://AL0UkUMw.pghfy.cn
http://sYEvZ1so.pghfy.cn
http://okQrxxTk.pghfy.cn
http://uOmWph5J.pghfy.cn
http://oFuXevs5.pghfy.cn
http://UIXm7mjH.pghfy.cn
http://S04hdJX8.pghfy.cn
http://IwZLrT0C.pghfy.cn
http://MR1WPeqK.pghfy.cn
http://K5dFLE98.pghfy.cn
http://oy9R2jDo.pghfy.cn
http://EwNlm7SH.pghfy.cn
http://7rlfXRCk.pghfy.cn
http://J2vpwzvr.pghfy.cn
http://www.dtcms.com/a/370809.html

相关文章:

  • 【FastDDS】Layer Transport ( 05-Shared Memory Transport)
  • AI工具深度测评与选型指南 - AI工具测评框架及方法论
  • Kernel中的cgroup2介绍
  • Iconify AI:免费商用AI图标生成工具,高效解决开发图标需求
  • MySQL 基础架构(一):SQL语句的执行之旅
  • STM32-----SPI
  • 洛谷 P1591 阶乘数码-普及-
  • DEEP THINK WITH CONFIDENCE-Meta-基于置信度的深度思考
  • Qt 基础教程合集(完)
  • swagger接口文档规范化(苍穹外卖)
  • 【微知】dmesg如何将dmesg消息查看日志等级?(dmesg -x; prefix)
  • 基于STM32智能阳台监控系统
  • Ubuntu 22.04.1上安装MySQL 8.0及设置root密码
  • 【混元AIGC+腾讯云智能体+首创Coze核心流思维导图MCP】:打造一个文思通-智能写作助手Agent
  • B.50.10.09-RPC核心原理与电商应用
  • C语言字符函数和字符串函数(2)
  • 基于STM32的智慧民宿环境监测系统设计
  • 从 JDK 1.8 切换到 JDK 21 时遇到 NoProviderFoundException 该如何解决?
  • [bat-cli] 打印机 | `src/printer.rs`
  • RLPR: EXTRAPOLATING RLVR TO GENERAL DOMAINS WITHOUT VERIFIERS
  • 抽成独立组件库:微前端架构下公共组件共享的最佳实践
  • 前端上传切片优化以及实现
  • 自适应滤波器:Ch1 正交性原理->维纳-霍夫方程
  • 1.5、机器学习-回归算法
  • 【基础-单选】UIAbility实例创建完成时触发的回调
  • 【YOLOv11】5.安装PyCharm
  • 从技术架构、接入路径、应用场景全梳理的智慧地产开源了
  • Javaweb 14.4 Vue3 视图渲染技术
  • 算法与数据结构实战技巧:从复杂度分析到数学优化
  • clang(clangd)与arm-linux-gcc、ARMGCC、ICCARM(IAR)、C51编译器的兼容性