【1 期】面试官:说说你对 static 的理解

55 阅读2分钟

static 关键字的主要用途是方便在没有创建对象时调用方法和变量及优化程序性能

1.static 变量(静态变量)

静态变量,也称为类变量,可以直接通过类名来访问。静态变量被所有的对象共享,在内存中只有一个副本,仅当在类初次加载时会被初始化,而非静态变量在创建对象的时候被初始化,并且存在多个副本,各个对象拥有的副本互不影响。

2.static 方法(静态方法)

静态方法不依赖于任何对象就可以访问。静态方法中不能访问类的非静态成员变量和方法,因为非静态成员变量和方法都是必须依赖具体的对象才能够被调用,但是在非静态成员方法中是可以访问静态成员方法和变量。

3.static 代码块(静态代码块)

静态代码块的主要用途是可以用来优化程序的性能,因为它只会在类加载时加载一次,很多时候会将一些只需要进行一次的初始化操作都放在静态代码块中执行。

4. 静态内部类

非静态内部类依赖于外部类的实例,也就是说需要先创建外部类实例,才能用这个实例去创建非静态内部类,而静态内部类不需要。静态内部类不能访问外部类的非静态的变量和方法。

5. 初始化顺序 - 类的初始化顺序

静态变量和静态代码块优先于实例变量和普通代码块,静态变量和静态代码块的初始化顺序取决于它们在代码中的顺序。存在继承的情况下,初始化顺序为:

  • 父类(静态变量、静态代码块)
  • 子类(静态变量、静态代码块)
  • 父类(实例变量、普通代码块)
  • 父类(构造函数)
  • 子类(实例变量、普通代码块)
  • 子类(构造函数)