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

createh54个月前 (02-18)技术教程37

#冬日生活分享#

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

小明的面试之旅

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

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

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

定义位置不同

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

小明举了个例子:

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

生命周期不同

小明继续说道:

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

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

运行结果:

默认值不同

小明补充道:

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

他列出了代码:

修饰符支持不同

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

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

存储位置不同

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

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

面试官的追问

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

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

场景化题目

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

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

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

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

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

总结

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

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

END

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

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

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

相关文章

Java变量、常量、运算符、数组_java常量与变量例子

变量(Variables)在 Java 中,变量用于存储程序运行时所需的数据(The data required during the runtime)。变量的声明(The declaration o...

Java变量_java变量名命名规则

变量如果按照大部分的书上来说,在程序运行过程中可以改变的量称之为变量。常量就是程序运行中不可改变的量就是常量。变量准确的来说就是存储的名称,如果你要把数据存到内存里,你就需要选择一个数据类型,而且还要...

Java基础知识总结_java基础知识概括

一、Java 在当今的软件开发领域,Java 无疑占据着举足轻重的地位。无论是开发大型企业级应用、Web 应用,还是安卓移动端应用,Java 的身影无处不在。比如,我们日常使用的电商 APP,其后台可...

Java初学者常见的10类问题_java入门例子

对于Java初学者来说,在学习过程中经常会遇到一些常见的问题。以下是Top 10常见问题及其解决方案:1. 环境配置问题问题:Java开发环境(如JDK、IDE)配置不正确。解决方案:确保正确安装了J...

Java关键字有哪些?_java关键字有哪些及其作用

Abstract 抽象的一个Java语言中的关键字,用在类的声明中来指明一个类是不能被实例化的,但是可以被其它类继承。一个抽象类可以使用抽象方法,抽象方法不需要实现,但是需要在子类中被实现break一...

Java反射机制最全详解(图文全面总结)

Java反射是各种框架以及中间件实现的基石,也是大厂面试重点考察内容,下面全面来详解Java反射机制@mikechen本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》里面。Java反...