最近进行的Java实习生的面试,有一件事很离谱
面试群体不仅有二本的同学,也有985硕士的同学。
但居然有90%以上的同学,对Java的一个基本考点,“static“这个关键字的作用,答的都不准确或者说是不对。
有人说这个关键字我会,有什么难度啊?
大家听一下接下来这个场景,看看能不能答上来。
问题1:Java这个关键字是什么作用呢?
大家都会不约而同说是静态的。
接着把这个问题细化一下。
问题2:在一个类的成员变量前面加static,和不加的区别是什么?
今年面试的学生竟然不约而同地都回答说,在前面加static之后,加载的时候就可以初始化,就可以节省时间。
大家是不是也是这么去想的?
但是这个问题其实去年以前它都不是这么回答的,或者说大部分人回答的是准确的。
但今年不知道怎么就一个非常准确的都没有。
在前两个问题的基础上继续追问。
问题3:既然说前面加static,初始化会更快,那么是不是所有的变量前面都要加static?这样项目启动就更快了。
这个问题出来之后,里面就有一部分同学开始卡住了。
这说明他们回答的不准确,所以一问就被别人堵住了。
他们没有真正理解它加和不加的区别是什么。
有同学会说,初始化的时候虽然快,但是它可能会占很多内存。
再继续追问。
问题4:我们平时写项目有大小之分。现在项目平时都不是很大,内存就足够大。包括spring的框架,加载时候就会全部的初始化。那不就是初始化就可以吗?反正内存足够大,跑起来也快。
那这些同学就哑口无言了。
离谱的地方就在于这。
这个关键字不是一个多么罕见的关键字,只要我们写代码,哪怕用什么方法,它都有这个关键字。
或者平时用的工具类也好,或者成员变量也好,都会有这个关键字。
但是它肯定不是因为快慢的原因。
若是快慢的原因,那只要用快就好了。
那不会存在加载慢的东西,因为我们肯定就是只用快的东西、性能好的东西。
那也就说明这个回答是不对的,它没有区分出加和不加的区别。
实际上很容易说明白。
就是这个变量是整个类的所有实体类实例所共有的。
举个例子的话就是说,如果是不加static,那每个类只能对它进行自己的私有的处理,它互相之间是不干扰的。
但是如果使用场景是需要这些实例都要去操作一个共用的一个数据,那这时候要加static。这么一讲的话,就非常清楚,非常简单。
但是不知道为什么今年这么多同学,竟然都在第一个问题就倒下了。
大厂在面试的时候,第一个会是一个简单的问题。
然后进行衍生,比如问并发性问题、初始化的这个虚拟机的问题等等。
但是如果第一个问题就答得不准确,面试官就认为这个人的基础很差,就不给他往后走的面试机会了。
所以不管怎么样,这种基础知识千万不要出问题。
一出问题,就一剑毙命。
感人,这个类型我终于做对了