关于static 关键字,想必大家都不会陌生,基本上应届生面试或多或少都会问道这个问题。

“static关键字的作用是什么?”

记得,毕业之初级,第一次面试是在杭电进行的东软的面试,卷子分八页,笔试时间90分钟。内容分为三语,中文,英文,附带日语的翻译(这个真心不会..关于static 关键字_面试

static在学校里用的时候,谁都会,但是也很少去思考,它到底有哪些作用。因为面试的时候面试官问你这个问题,并不是希望你仅仅回答一个唯一的答案。至少应该尽可能的完善。

可以从几个方面来看:

1.修饰对象:

1. static关键字用来修饰的对象是什么? 答案:变量+函数 (这显然是对的!!)

2. 再来看,可以放在哪里? 显然: 函数体内部 + 函数体外部

3. 然后在来分别讨论static关键字修饰的静态变量在函数体内部和外部之间的区别,在函数体内部的时候:一个被声明为静态的变量在这一函数被调用过程中维持其值不变。但是注意,是在本次调用过程中值维持不变,下次再调用的时候,会使用上一次保留的值进行操作

在函数体外部的时候: 表示该静态变量可以被当前的模块中的其他函数体使用,其他模块无法反问

4. 修饰函数体的时候:表示该静态函数,只能在当前模块中使用。起了限制作用


2.直接目的

再讨论static的时候,针对修饰对象已经完整了,再看它明了直接的目的是什么,为什么要使用它?用了static之后的后果是什么?

都知道一个函数内部的局部变量,在函数运行结束的时候,已经意味着它无效了,死亡了。而static而不是,它的延续性让它保留了之前操作的值。这就体现了它第一个作用:拓展生存期!延长了生命周期。为什么如此,因为它存放在静态数据区(静态存储区)。

再则static修饰的静态变量和函数体,都可以限制其他模块的反问,则说明了另一个目的:限制作用域


3.拓展

static 的另一个作用,可能都不会陌生,就是单例的应用。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。

//饿汉式
class Singleton {
  private static Singleton instance=new Singleton();
  private Singleton(){}
  static Singleton getInstance() {
      return instance;
  }
}
//懒汉式
class Singleton {
  private static Singleton instance=null;
  private Singleton(){}
  static Singleton getInstance() {
      if(instance==null)
      instance=new Singleton();
      return instance;
  }
}

暂时如此!