【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,一经查实,立即删除!

相关文章

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

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

什么是OSPFv2 ?

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

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…

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

Windows 下载安装ffmpeg

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

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

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

【收藏级神丹】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…

使用中国大陆镜像源安装最新版的 docker Deamon

在一个智算项目交付过程中,出现了新建集群中的全部 docker server V19 进程消失、仅剩 docker server 的 unix-socket 存活的现象。 为了验证是否是BD产品研发提供的产品deploy语句缺陷,需要在本地环境上部署一个简单的 docker Deamon 环境。尴尬的是&a…

针对某客户报表系统数据库跑批慢进行性能分析及优化

某客户报表系统数据库跑批时间过长,超出源主库较多,故对其进行了分析调优,目前状态如下: 1、业务连接的rac的scanip,因为负载均衡将跑批的连接连接到了多个计算节点导致节点间通讯成本较高,故速率缓慢&…

HexPlane: A Fast Representation for Dynamic Scenes一种动态场景的快速表示方法

Abstract 动态三维场景的建模与再现是三维视觉领域的一个具有挑战性的课题。先前的方法基于 NERF 并依赖于隐式表示这是缓慢的,因为它需要许多 MLP 评估,限制真实世界的应用程序。我们展示了动态三维场景可以明确地表示为六个平面的学习功能&#xff0c…

SQL语句(DCL)

DCL英文全称Data Control Language(数据控制语言),用来管理数据库用户、控制数据库的访问权限 DCL-管理用户 create user itcastlocalhost identified by 123456 ;-- 修改用户heima的密码为1234 alter user heima% identified with mysql_native_passwo…

C++ windows下使用openvino部署yoloV8

目录 准备版本: 准备事项: 选择配置界面: 下载界面: ​编辑 添加VS配置: 准备代码: yolov8.h yolov8.cpp detect.cpp 如何找到并放置DLL: 准备版本: opencv 4.6.0 openvino 2024.0…

大模型成为软件和数据工程师

前言 想象一下这样一个世界:人工智能伙伴负责编码工作,让软件和数据工程师释放他们的创造天赋来应对未来的技术挑战! 想象一下:你是一名软件工程师,埋头于堆积如山的代码中,淹没在无数的错误中&#xff0…