java中的局部变量
文章目录
- 一、定义
- 二、作用域和作用位置
- 三、声明周期和初始化
- 四、内存管理
- 五、Java内存区域划分
- 六、例子
一、定义
在java中,局部变量指在方法、构造方法、代码块(如{}包裹的语句块)内部声明的变量
class work {{int a = 10;}public work() {int a = 10;}
}
public class Test {public static void main(String[] args) {int x = 10;System.out.println(x);}
}
像上方代码。a都是属于局部变量
二、作用域和作用位置
- 作用域限制:仅在声明它的方法、构造方法或代码块内部有效,超出该范围无法访问
public void example() {int localVar = 10; // 局部变量,仅在example()方法内有效System.out.println(localVar); // 正确
}
// System.out.println(localVar); // 错误:超出作用域
- 定义位置:必须直接定义在方法体、构造方法或代码块中,而非类范围内
三、声明周期和初始化
-
生命周期
生命周期:从变量声明时开始,到所在方法、构造方法或代码块执行结束时销毁。
例如,每次调用方法时会创建新的局部变量,执行完毕后释放。 -
初始化要求
必须显式初始化:局部变量在使用前必须赋值,否则编译器会报错。
例如:
public void test() {int x; // System.out.println(x); // 错误:未初始化x = 5; // 必须先赋值
}
四、内存管理
内存管理
存储位置:局部变量存储在栈内存中,随方法调用结束自动释放
与成员变量的主要区别
| 对比项 | 局部变量 | 成员变量 |
|---|---|---|
| 定义位置 | 方法/代码块内部 | 类内部、方法外部 |
| 作用域 | 限于声明块内 | 类内所有方法均可访问 |
| 初始化 | 必须显式赋值 | 自动赋予默认值(如int为0,boolean赋值为false、字符型赋值为’\u0000’) |
| 存储位置 | 栈内存 | 堆内存(实例变量)或方法区(静态变量指的是用static修饰的变量) |
class student {public String name;public int age;public char sex;public float height;boolean guess;
}
public class Test {public static void main(String[] args) {student stu = new student();System.out.println(stu.name);System.out.println(stu.age);System.out.println(stu.sex);System.out.println(stu.height);System.out.println(stu.guess);}
}
在这里定义了一个类变量,但是没有初始化赋值,运行后,可发现编译器会自动赋值

五、Java内存区域划分
Java内存区域是指 JVM运行时将数据分区域存储 ,简单的说就是不同的数据放在不同的地方。通常又叫运行时数据区域。
java的内存区

在这里主要讲述一下虚拟机栈:
虚拟机栈
虚拟机栈 描述的是 Java 方法执行的内存模型:
每个方法在执行的同时都会创建一个栈帧(Stack Frame,是方法运行时的基础数据结构)用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程。
虚拟机栈是每个线程独有的,随着线程的创建而存在,线程结束而死亡。
在虚拟机栈内存不够的时候会OutOfMemoryError,在线程运行中需要更大的虚拟机栈时会出现StackOverFlowError。

虚拟机栈包含很多栈帧,每个方法执行的同时会创建一个栈帧,栈帧又存储了方法的局部变量表、操作数栈、动态连接和方法返回地址等信息。
在活动线程中,只有位于栈顶的栈帧才是有效的,称为当前栈帧,与这个栈帧相关联的方法称为当前方法。
六、例子
例1:方法内定义的变量
在方法体中直接声明并使用的变量,必须显式初始化后才能使用
public void printMessage() {String message = "Hello, Java!"; // 局部变量 message//String message; //这是错误的使用System.out.println(message);
}
错误代码执行后出现结果

例子2:代码块中的临时变量
在 if、for 等代码块中声明的变量,仅在该块内有效
public void calculateSum() {int[] numbers = {1, 2, 3};for (int i = 0; i < numbers.length; i++) { // 局部变量 iint current = numbers[i]; // 局部变量 currentSystem.out.println(current);}// System.out.println(current); // 错误:current 超出作用域
}
例子3:方法参数
方法的形参本质上也是局部变量
public void greetUser(String name) { // name 是局部变量System.out.println("Welcome, " + name);
}
例子4:未初始化的局部变量会导致编译错误
public void example() {int count; // 声明但未初始化// System.out.println(count); // 错误:变量未初始化count = 10; // 必须先赋值
}
相关文章:
java中的局部变量
文章目录 一、定义二、作用域和作用位置三、声明周期和初始化四、内存管理五、Java内存区域划分六、例子 一、定义 在java中,局部变量指在方法、构造方法、代码块(如{}包裹的语句块)内部声明的变量 class work {{int a 10;}public work() {i…...
【芯片设计】AI芯片前端设计工程师面试记录·20250303
【芯片前端设计面试经验专栏介绍】 专栏聚焦数字芯片前端设计核心技术与面试方法论,涵盖架构设计、RTL开发、验证方法学、低功耗设计、时序收敛等高频考点,深入解析行业头部企业的面试真题与设计场景。内容包含但不限于: 知识点系统梳理 :从Verilog/SV语法陷阱、FSM设计模式…...
(IDE接入DeepSeek)简单了解DeepSeek接入辅助开发与本地部署建议
重点:IDE接入DeepSeek是否收费 收费! 本文章主要是为了给小白避雷,目前很多文章告诉大家怎么接入DeepSeek,但是并未告知大家是否收费。如果是想白嫖的,就可以不用去接入了。 一、引言 最近爆火的AI人工智能工具DeepSe…...
【算法学习之路】5.贪心算法
贪心算法 前言一.什么是贪心算法二.例题1.合并果子2.跳跳!3. 老鼠和奶酪 前言 我会将一些常用的算法以及对应的题单给写完,形成一套完整的算法体系,以及大量的各个难度的题目,目前算法也写了几篇,题单正在更新…...
0x03 http协议和分层架构
HTTP协议 简介 Hyper Text Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则 http协议基于TCP协议:面向连接,安全基于请求-响应模型:一次请求对应一次响应HTTP协议是无状态的协议ÿ…...
ES批量查询
在 Elasticsearch 中,multi_search(也称为 msearch)是一种允许你在单个请求中执行多个搜索操作的 API。它可以显著减少网络开销,尤其是在需要执行多个查询时。multi_search 会将多个查询打包成一个请求发送给 Elasticsearch&#…...
React Refs:深入理解与最佳实践
React Refs:深入理解与最佳实践 引言 在React中,refs是用于访问DOM元素或组件实例的一种方式。与类组件的ref属性不同,函数组件的ref需要使用useRef钩子。正确使用refs可以大大提升React应用的性能和可维护性。本文将深入探讨React Refs的原…...
智能合约安全指南 [特殊字符]️
智能合约安全指南 🛡️ 1. 安全基础 1.1 常见漏洞类型 重入攻击整数溢出权限控制缺陷随机数漏洞前后运行攻击签名重放 1.2 安全开发原则 最小权限原则检查-生效-交互模式状态机安全失败保护机制 2. 重入攻击防护 2.1 基本防护模式 contract ReentrancyGuarde…...
【Python项目】基于Python的书籍售卖系统
【Python项目】基于Python的书籍售卖系统 技术简介:采用Python技术、MYSQL数据库等实现。 系统简介:书籍售卖系统是一个基于B/S结构的在线图书销售平台,主要分为前台和后台两部分。前台系统功能模块分为(1)用户中心模…...
【Linux】【网络】UDP打洞-->不同子网下的客户端和服务器通信(未成功版)
【Linux】【网络】UDP打洞–>不同子网下的客户端和服务器通信(未成功版) 上次说基于UDP的打洞程序改了五版一直没有成功,要写一下问题所在,但是我后续又查询了一些资料,成功实现了,这次先写一下未成功的…...
(1)udp双向通信(2)udp实现文件复制(3)udp实现聊天室
一.udp双向通信 1.fork进程实现双向通信 【1】head.h 【2】client客户端 (1)父进程从键盘获取字符串 (2)输入quit,发送结束子进程信号 (3)exit退出父进程 (1)子进程接受…...
c高级第五天
1> 在终端提示输入一个成绩,通过shell判断该成绩的等级 [90,100] : A [80, 90) : B [70, 80) : C [60, 70) : D [0, 60) : 不及格 #!/bin/bash# 提示用户输入成绩 read -p "请输入成绩(0-100):" score# 判断成…...
【JQuery—前端快速入门】JQuery 操作元素
JQuery 操作元素 1. 获取/修改元素内容 三个简单的获取元素的方法: 这三个方法即可以获取元素的内容,又可以设置元素的内容. 有参数时,就进行元素的值设置,没有参数时,就进行元素内容的获取. 接下来,我们需…...
深度学习-139-RAG技术之Agentic Chunking分块技术的工作原理及简单实现
文章目录 1 传统分块的问题2 Agentic Chunking的工作原理3 Agentic Chunking怎么实现3.1 Propositioning文本3.1.1 大语言模型3.1.2 官方提示词模板3.1.3 抽取链3.2 使用LLM Agent创建文本块3.2.1 创建新文本块3.2.2 将proposition添加到文本块3.2.3 将proposition推送到合适的…...
BambuStudio学习笔记:Flow 类
Flow 类文档 概述 Flow 类用于管理3D打印过程中的挤出流程参数计算,包括挤出宽度、间距、流量等核心参数。支持桥梁模式、不同流程角色配置,提供多种流量计算方式。 头文件 #ifndef slic3r_Flow_hpp_ #define slic3r_Flow_hpp_ // ... #endif枚举类型…...
标签的ref属性 vue中为什么不用id标记标签
标签的ref属性 vue中为什么不用id标记标签 假设有一对父子组件,如果父组件和子组件中存在id相同的标签,会产生冲突。通过id获取标签会获取到先加载那个标签。 标签的ref属性的用法 在父组件App中,引入了子组件Person。 并使用ref标记了Pe…...
7.1.1 计算机网络的组成
文章目录 物理组成功能组成工作方式完整导图 物理组成 计算机网络是将分布在不同地域的计算机组织成系统,便于相互之间资源共享、传递信息。 计算机网络的物理组成包括硬件和软件。硬件中包含主机、前端处理器、连接设备、通信线路。软件中包含协议和应用软件。 功…...
IDEA 接入 Deepseek
在本篇文章中,我们将详细介绍如何在 JetBrains IDEA 中使用 Continue 插件接入 DeepSeek,让你的 AI 编程助手更智能,提高开发效率。 一、前置准备 在开始之前,请确保你已经具备以下条件: 安装了 JetBrains IDEA&…...
mapbox基础,使用点类型geojson加载symbol符号图层,用于标注文字
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️symbol符号图层样式二、🍀使用点类型…...
STM32---FreeRTOS中断管理试验
一、实验 实验目的:学会使用FreeRTOS的中断管理 创建两个定时器,一个优先级为4,另一个优先级为6;注意:系统所管理的优先级范围 :5~15 现象:两个定时器每1s,打印一段字符串&#x…...
Python 网络爬虫教程与案例详解
Python 网络爬虫教程与案例详解 在当今数字化时代,数据的价值愈发凸显。Python 作为一门强大的编程语言,在数据获取领域有着广泛的应用,其中网络爬虫便是一项重要的技术。网络爬虫能够自动从网页中提取所需数据,极大地提高了数据…...
HTTP 状态代码 501 502 问题
问题 单个客户端有时会出现 报错 501 或 502 如下: System.Net.Http.HttpRequestException: Response status code does not indicate success: 501 (Not Implemented) 分析 可以排除 服务器无法处理的问题(测试发现 一个客户端报错,不会影响…...
React 之 Redux 第二十八节 学习目标与规划大纲及概要讲述
接下来 开始Redux 全面详细的文档输出,主要基于一下几个方面,欢迎大家补充指正 一、Redux 基础概念 为什么需要 Redux? 前端状态管理的挑战(组件间通信、状态共享) Redux 解决的问题:集中式、可预测的状态…...
visual studio 2022 手工写一个简单的MFC程序
书籍:《Visual C 2017从入门到精通》的2.1.2 MFC方式中2.手工写一个简单的MFC程序 环境:visual studio 2022 内容:手工写一个简单的MFC程序 1.文件->新建->项目 2.根据以下步骤选择Windows桌面向导 3.输入项目名,选择保…...
GaussDB自带诊断工具实战指南
一、引言 GaussDB是一种分布式的关系型数据库。在数据库运维中,快速定位性能瓶颈、诊断故障是保障业务连续性的关键。GaussDB内置了多种诊断工具,结合日志分析、执行计划解析和实时监控功能,帮助开发者与运维人员高效解决问题。本文深入讲解…...
python GUI之实现一个自定义的范围滑块控件:QRangeSlider
在图形用户界面(GUI)开发中,滑块控件是一种常用于选择数值范围的交互元素。然而,很多时候默认的滑块控件无法满足复杂的交互需求,例如同时选择一个范围的起始值和结束值。为此,实现了一个自定义的范围滑块控…...
测试用例总结
一、通用测试用例八要素 1、用例编号; 2、测试项目; 3、测试标题; 4、重要级别; 5、预置条件; 6、测试输入; 7、操作步骤; 8、预期输出 二、具体分析通…...
深度学习之图像学习知识点
数据增广: 数据增广是深度学习中常用的技巧之一,主要用于增加训练数据集,让数据集尽可能的多样化,使得训练的模型具有更强的泛化能力,目前数据增广主要包括:水平/垂直翻转,旋转,缩放…...
vulnhub靶场之【digitalworld.local系列】的development靶机
前言 靶机:digitalworld.local-devt-improved,IP地址为192.168.10.10 攻击:kali,IP地址为192.168.10.6 kali采用VMware虚拟机,靶机选择使用VMware打开文件,都选择桥接网络 这里官方给的有两种方式&…...
C语言---猜数字游戏
猜数字游戏代码 #include <stdio.h> #include <time.h> #include <stdlib.h>void meun() {printf("**********************\n");printf("******* 1.play *******\n");printf("******* 0.quit *******\n");printf("*****…...
