【Java11】变量的初始化和内存中的运行机制

成员变量的初始化和内存中的运行机制

系统加载类或创建类的实例时,系统自动为成员变量分配内存空间,然后自动为成员变量指定初始值。

class Person
{public String name; // 实例变量public static int eyeNum; // 类变量
}var p1 = Person();
var p2 = Person();p1.name = "张三";
p2.name = "王五";
p1.eyeNum = 2;
p2.eyeNum = 3;
  • 第7行代码,如果是第一次使用Person类,系统会加载这个类并初始化这个类,即为该类的类变量分配内存空间,并指定默认值

在这里插入图片描述

  • 在加载类之后,第7行实际上还创建了一个Person对象(实例),并让引用变量p1指向它。这时,p1指向的对象中,name这个实例变量默认初始化为null

在这里插入图片描述

  • 第8行代码,此时并不是第一次加载Person类,不会再次分配eyeNum的内存。只是让p2指向一个新的Person对象。

在这里插入图片描述

  • 第10行代码,这时为p1的实例变量p1.name赋值。这个操作实际上是让name指向一个字符串(还记得字符串的内存运行机制吗?)

在这里插入图片描述

尽量使用类来调用类变量。虽然Java允许使用对象来调用类变量,但这太容易造成误会了。没必要非考验自己的智商。

局部变量的初始化和内存运行机制
  • 局部变量不会自动初始化,因此除非被显式赋值,不然不会为它分配内存;
  • 局部变量不属于任何类或实例,因此总是位于栈内存中,具体地:
    • 如果是基本类型的变量,就直接把该变量的值存在栈内存中;
    • 如果是引用类型的变量,栈内存中存的是地址,通过该地址指向实际的对象或数组。

栈内存中的变量不需要系统垃圾回收,往往随着方法或代码块的结束而结束

对引用类型的局部变量,方法或代码块结束时,它销毁。此时堆中的对象或数组没有人指向它了。若没有任何引用变量指向它,会启动垃圾回收机制,销毁堆内存中的它。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/41353.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第9篇 区块链安全性:理解和应对常见攻击方式

亲爱的读者,欢迎来到《区块链常识:从小白到顶级行业专家》的第9章。今天,我们将一起探索区块链世界的黑暗面——安全性问题。在这个章节中,我会用最简单的语言和最生动的例子,带你了解一些常见的区块链攻击方式,并教你如何应对它们。 51%攻击 想象一下,如果你的学校里…

2024年亚太中文赛数学建模竞赛B题 洪水灾害的数据分析与预测详细思路解析

2024年亚太中文赛数学建模竞赛B题 洪水灾害的数据分析与预测详细思路解析 解题方法: 首先就是对数据进行数据的预处理包括缺失值和异常值处理,之后就是分析哪些指标与洪水的发生有着密切的关联,可以使用相关性分析(建议使用斯皮尔…

什么是OSPFv2 ?

什么是OSPF ? 开放式最短路径优先 OSPF(Open Shortest Path First)是IETF组织开发的一个基于链路状态的内部网关协议(Interior Gateway Protocol)。 目前针对IPv4协议使用的是OSPF Version 2(RFC2328)&a…

PHP框架Symfony详解

Symfony 是一个用PHP语言编写的开放源代码的Web应用框架,旨在加速Web应用程序的开发过程,提高代码的可维护性和可扩展性。以下是对Symfony框架的详细解析: 一、框架概述 1. 起源与开发者 Symfony由SensioLabs(现为Symfony公司&…

YOLO V7项目使用

YOLO V7项目使用 根据官方论文中提供的项目地址:使用git clone将项目下载到本地。 https://github.com/WongKinYiu/yolov7 git clone https://github.com/WongKinYiu/yolov7 使用pycharm打开项目,根据官方提供的requirement.txt文件下载项目启动所需要的…

Java实习手册(小白也看得懂)

秃狼说 距离俺发布的学习路线已经六个月了,那我给小伙伴的学习周期是四五个月左右,我相信大多的小伙伴已经学习的差不多了。正好赶上暑期实习的阶段,在暑期找到实习就成为暑期的头等大事。 实习经验在校招的起到决定性的作用,所…

Spring Security基本源码解析(超精细版)

一、基本源码解析 1.1 UsernamePasswordAuthenticationFilter 用户名称和密码的过滤器 浏览器发送用户名称和密码 ----》 经过过滤器「UsernamePasswordAuthenticationFitler」 1.2 UsernamePasswordAuthenticationFilter核心方法 重写父类「AbstractAuthenticationProcessing…

spring6中如何不使用@RequestParam注解

RequestParam的使用场景 RequestParam注解可以用在GET和POST请求中,用于指定请求路径或请求体的参数,通常请求格式为表单格式 什么情况下可以不使用RequestParam注解 当Controller方法的参数名与请求中的参数名一致时,可以不用RequestPar…

2.4章节python中字符串类型

在Python中,字符串(String)是一种基本的数据类型,用于表示文本信息。字符串可以包含字母、数字、标点符号或任何Unicode字符。Python中的字符串是不可变的,这意味着一旦创建了字符串,就不能更改字符串中的字…

Build a Large Language Model (From Scratch)附录D(gpt-4o翻译版)

来源:https://github.com/rasbt/LLMs-from-scratch?tabreadme-ov-file https://www.manning.com/books/build-a-large-language-model-from-scratch

C++实现简化 QtBase(4):增加简单实用的事件机制

前面的文章已经实现了许多QObject的功能了: C实现一个简单的Qt信号槽机制 C实现简化版Qt信号槽机制(2):增加内存安全保障 C实现简化版Qt的QObject(3):增加父子关系、属性系统 但是,…

Windows 下载安装ffmpeg

下载地址 https://ffmpeg.org/download.html 测试 管理员方式打开控制台,输入ffmpeg测试 配置环境变量

让你的 Rabbids Rockstar人物化身加入欢乐行列!

让你的 Rabbids Rockstar 人物化身加入欢乐行列! https://www.youtube.com/watch?vwLBd20BxbS8 当这些调皮的小兔子以狂野的装扮、超棒的吉他弹奏和搞笑滑稽的动作登上舞台中央时,你将感受到它们异想天开的魅力。通过人物化身释放你内心的摇滚明星魅力&…

Eigen 欧拉角转旋转矩阵相互转换

目录 一、什么是欧拉角 二、理解欧拉角 2.1 旋转顺序 2.2 内旋和外旋 2.3 万向锁 2.4 如何避面出现万向锁 三、欧拉角与旋转矩阵相互转化 3.1 欧拉角转旋转矩阵 3.2 代码示例 3.3 旋转矩阵转欧拉角 3.4 代码示例 一、什么是欧拉角 欧拉角(Euler Angles)就是物体绕…

【收藏级神丹】Liae384_刘亦菲_直播可用,平衡度最高的原创神丹,独家珍稀资源

Liae384_刘亦菲_DFL神丹:点击下载 此丹较重,小卡可以使用但不能训练,实测复训适合24G卡8G、12G、16G卡下载练好的专丹直接使用即可384的Liae对各类杂论视频兼容比较好,高参也能容忍高分辨率的DST复用方式: 非必要不用删除AB&…

Go源码--channel源码解读

简介 channel顾名思义就是channel的意思,主要用来在协程之间传递数据,所以是并发安全的。其实现原理,其实就是一个共享内存再加上锁,底层阻塞机制使用的是GMP模型。可见 GMP模型就是那个道,道生一,一生二,二生三,三生…

【Mathematica14.0】快速从下载安装到使用

目录 1.简介 2.下载安装 下载 安装 3.一小时掌握mathematica使用 单元模式 内置函数 符号表达式 迭代器 赋值 通配符及查找替换 函数定义 匿名函数(拉姆达表达式) 函数映射 函数式与运算符 函数自定义选项 图形可视化 交互式界面 数值…

Rocky Linux 9.4基于官方源码制作openssh 9.8p1二进制rpm包 —— 筑梦之路

2024年7月1日,openssh 9.8版本发布,主要修复了CVE-2024-6387安全漏洞。 由于centos 7的生命周期在6月30日终止,因此需要逐步替换到Rocky Linux,后续会有更多分享关于Rocky Linux的文章。 环境说明 1. 操作系统版本 cat /etc/o…

【论文阅读】-- Strscope:不规则测量的时间序列数据的多尺度可视化

Stroscope: Multi-Scale Visualization of Irregularly Measured Time-Series Data 摘要1 引言2相关工作2.1(大型)时间序列数据可视化2.2 事件序列数据可视化2.3 评价 3问题分析3.1 数据集3.2 场景——现状3.3 设计流程3.4 设计原理 4 涟漪图&#xff1a…

极限学习机(Extreme Learning Machine,ELM)及其Python和MATLAB实现

极限学习机(Extreme Learning Machine,ELM)是一种快速而有效的机器学习算法,最初由马洪亮等人于2006年提出。ELM是一种单隐层前馈神经网络,其背景源于对传统神经网络训练过程中反向传播算法的改进与优化。相比传统神经…