MENU

Java-32 static关键字

October 5, 2023 • Read: 78 • Java阅读设置

面向对象编程

static关键字

1 Background

  • 之前我们定义一个类时,类所具有的成员往往没有特定的值,仅仅作为“模板”的角色。
    比如,对于属性,只是定义该类所具有的属性有什么,但没有具体的值。对于方法,只是按照已定义的属性名或其他成员定义某种功能,也是没有具体的值。
    换句话说,之前我们定义的类的成员,不论是属性还是方法,其确切的内容随着构造的对象的不同而不同。
    简单地说,实例化的对象各自具有一份基于自己本身内容的类的成员。
  • 现在,存在一些不特定于某个对象,即不依赖于特定某个对象的类的成员。
    由于这些类的成员不依赖于特定的某个对象,因此可以不用每个对象都独有一份,可以让所有该类的对象共享一份即可。
    并且,这种类的成员的存在,即加载,不依赖于特定对象的构造,而是依赖于该类的存在,或者说加载。

实现上述目标,就是通过利用static关键字。
static关键字所修饰的类的成员就不特定于任何对象,所有该类的实例化对象共享该类的成员。

2 Usage of static

  • 能够使用static的结构:属性、方法、代码块和内部类。
    static是作用于类的成员的,类的成员包括:1)属性,2)方法,3)构造器,4)代码块,5)内部类。除了构造器外,其他的结构都可以不特定于任何对象。
    构造器是用来构造对象的,即每个对象的特有内容通过构造器完成。如果构造器可以不特定于任何对象,用static修饰,那么构造的所有对象都是相同的,没有意义。
  • 由于之前学习了方法和属性,这里先只讨论static用于这两个结构的情况,本质上static的使用关键是以下几点:

    • static修饰的方法和属性在内存中只有一份,存在于方法区的静态域中,所有类的对象共享由static修饰的方法和属性。
    • static修饰的方法和属性随类的加载而加载,不依赖于任何对象的构造。
      可以直接通过类名.的方式来使用由static修饰的方法和属性。
      换句话说,那些非static修饰的方法和属性随对象的构造而加载。
    • static修饰的方法不能使用非static修饰的结构。
      static修饰的方法既能够使用由static修饰的结构,也能使用非static修饰的结构。
      2023-10-05T14:30:56.png

3 When to use static

本质,不随对象不同而不同,就可以使用static

  • 属性:不随对象不同而不同。
  • 方法:

    • 操作静态属性的方法
    • 工具类中的方法,比如MathArrayCollections等。
Last Modified: October 10, 2023