别再被绕晕了!5分钟读懂成员变量和局部变量的所有区别!

简介: 本文以小明的面试经历为例,详细解析了Java中成员变量与局部变量的区别,包括定义位置、生命周期、默认值、修饰符支持、存储位置及多线程环境下的表现,帮助读者更好地理解和应对面试中的相关问题。



大家好呀,我是小米!今天跟大家聊一聊一个在Java面试中超高频出现的话题:成员变量与局部变量。无论是社招还是校招,关于这俩的考点总是层出不穷,面试官也总喜欢用它们来做“陷阱题”。今天,我就用一个小故事来揭开这两个变量的神秘面纱!

小明的面试之旅

故事的主角小明,是一名有三年开发经验的Java程序员。最近他在准备跳槽,收到了心仪公司的面试邀请。面试当天,他自信满满地走进面试室。

面试官笑着问:“小明,先来个简单的问题。能给我讲讲Java中的成员变量和局部变量的区别吗?”

小明微微一笑:“当然可以,成员变量和局部变量主要有以下几点不同:”

定义位置不同

  • 成员变量:定义在类中,但在方法、构造器或代码块之外。
  • 局部变量:定义在方法、构造器或代码块中。

小明举了个例子:

面试官点点头:“很好!继续说说。”

生命周期不同

小明继续说道:

  • 成员变量的生命周期和对象绑定,对象存在时它就存在
  • 局部变量的生命周期则很短,方法执行完后它就被销毁了

他补充道:“假如有个类实例化了多次,每个实例都有自己的一份成员变量,但局部变量不受影响。”

运行结果:

默认值不同

小明补充道:

  • 成员变量有默认值。比如int类型的默认值是0,引用类型的默认值是null。
  • 局部变量没有默认值,必须显示初始化,否则会报错。

他列出了代码:

修饰符支持不同

  • 成员变量可以被public、protected、private等访问修饰符修饰,还可以用static、final等关键字。
  • 局部变量不能使用访问修饰符,只能用final修饰。

小明解释:“所以如果看到局部变量用public修饰,基本可以确定是语法错误。”

存储位置不同

小明说道:“成员变量存储在堆内存,而局部变量存储在栈内存。”

他特意解释了一下:“局部变量存储在栈中,因此存取速度快,但生命周期短;成员变量存储在堆中,可以跟随对象的生命周期。”

面试官的追问

面试官听完后,满意地点了点头,但随即又追问:“假如成员变量和局部变量同名,代码如何处理呢?”

小明胸有成竹地回答:“在这种情况下,局部变量会屏蔽成员变量,但可以通过this关键字访问成员变量。”

场景化题目

面试官微笑着点点头,抛出了一个场景题:

在一个多线程环境中,成员变量和局部变量分别会有什么表现?

小明立刻思考了一下,回答道:

  • 成员变量是线程不安全的,因为多个线程可以访问同一个对象的成员变量,容易导致数据竞争。
  • 局部变量是线程安全的,因为它们存储在每个线程的栈中,不会被其他线程共享。

他还写了一个简单的代码示例来说明:

总结

讲到这里,小明侃侃而谈,彻底征服了面试官。他笑着说:“其实,成员变量和局部变量的区别并不难记,但在不同的场景中,它们的表现会有很多细微差别。所以平时要多加练习,才能在面试中轻松应对!”

面试官满意地点了点头:“很好,小明,你的表现很棒!期待你加入我们的团队!”

END

通过今天的分享,大家是不是对成员变量和局部变量的区别更加清楚了?如果你还有其他Java相关的问题,欢迎留言讨论哦!小米会持续为大家带来更多技术干货~

你也有面试题想讨论?评论区见!

我是小米,一个喜欢分享技术的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号软件求生,获取更多技术干货!

相关文章
|
13天前
|
人工智能 自动驾驶 大数据
预告 | 阿里云邀您参加2024中国生成式AI大会上海站,马上报名
大会以“智能跃进 创造无限”为主题,设置主会场峰会、分会场研讨会及展览区,聚焦大模型、AI Infra等热点议题。阿里云智算集群产品解决方案负责人丛培岩将出席并发表《高性能智算集群设计思考与实践》主题演讲。观众报名现已开放。
|
6天前
|
自然语言处理 数据可视化 API
Qwen系列模型+GraphRAG/LightRAG/Kotaemon从0开始构建中医方剂大模型知识图谱问答
本文详细记录了作者在短时间内尝试构建中医药知识图谱的过程,涵盖了GraphRAG、LightRAG和Kotaemon三种图RAG架构的对比与应用。通过实际操作,作者不仅展示了如何利用这些工具构建知识图谱,还指出了每种工具的优势和局限性。尽管初步构建的知识图谱在数据处理、实体识别和关系抽取等方面存在不足,但为后续的优化和改进提供了宝贵的经验和方向。此外,文章强调了知识图谱构建不仅仅是技术问题,还需要深入整合领域知识和满足用户需求,体现了跨学科合作的重要性。
|
1月前
|
存储 人工智能 弹性计算
阿里云弹性计算_加速计算专场精华概览 | 2024云栖大会回顾
2024年9月19-21日,2024云栖大会在杭州云栖小镇举行,阿里云智能集团资深技术专家、异构计算产品技术负责人王超等多位产品、技术专家,共同带来了题为《AI Infra的前沿技术与应用实践》的专场session。本次专场重点介绍了阿里云AI Infra 产品架构与技术能力,及用户如何使用阿里云灵骏产品进行AI大模型开发、训练和应用。围绕当下大模型训练和推理的技术难点,专家们分享了如何在阿里云上实现稳定、高效、经济的大模型训练,并通过多个客户案例展示了云上大模型训练的显著优势。
|
1月前
|
存储 人工智能 调度
阿里云吴结生:高性能计算持续创新,响应数据+AI时代的多元化负载需求
在数字化转型的大潮中,每家公司都在积极探索如何利用数据驱动业务增长,而AI技术的快速发展更是加速了这一进程。
|
1天前
|
人工智能 容器
三句话开发一个刮刮乐小游戏!暖ta一整个冬天!
本文介绍了如何利用千问开发一款情侣刮刮乐小游戏,通过三步简单指令实现从单个功能到整体框架,再到多端优化的过程,旨在为生活增添乐趣,促进情感交流。在线体验地址已提供,鼓励读者动手尝试,探索编程与AI结合的无限可能。
|
6天前
|
Cloud Native Apache 流计算
PPT合集|Flink Forward Asia 2024 上海站
Apache Flink 年度技术盛会聚焦“回顾过去,展望未来”,涵盖流式湖仓、流批一体、Data+AI 等八大核心议题,近百家厂商参与,深入探讨前沿技术发展。小松鼠为大家整理了 FFA 2024 演讲 PPT ,可在线阅读和下载。
3063 10
PPT合集|Flink Forward Asia 2024 上海站
|
2天前
|
人工智能 自然语言处理 前端开发
从0开始打造一款APP:前端+搭建本机服务,定制暖冬卫衣先到先得
通义灵码携手科技博主@玺哥超carry 打造全网第一个完整的、面向普通人的自然语言编程教程。完全使用 AI,再配合简单易懂的方法,只要你会打字,就能真正做出一个完整的应用。
883 11
|
19天前
|
人工智能 自然语言处理 前端开发
100个降噪蓝牙耳机免费领,用通义灵码从 0 开始打造一个完整APP
打开手机,录制下你完成的代码效果,发布到你的社交媒体,前 100 个@玺哥超Carry、@通义灵码的粉丝,可以免费获得一个降噪蓝牙耳机。
5865 16
|
1月前
|
缓存 监控 Linux
Python 实时获取Linux服务器信息
Python 实时获取Linux服务器信息
|
12天前
|
机器学习/深度学习 人工智能 安全
通义千问开源的QwQ模型,一个会思考的AI,百炼邀您第一时间体验
Qwen团队推出新成员QwQ-32B-Preview,专注于增强AI推理能力。通过深入探索和试验,该模型在数学和编程领域展现了卓越的理解力,但仍在学习和完善中。目前,QwQ-32B-Preview已上线阿里云百炼平台,提供免费体验。