🗒️static关键字
Mar 25, 2024
| Mar 25, 2024
0  |  Read Time 0 min
type
status
date
slug
summary
tags
category
icon
password

static存在的主要意义

static的主要意义在于创建独立于具体对象的域变量或者方法,这意味着即使没有创建对象,也能使用属性和调用方法。如果一个变量没有static,又不是局部变量,那么它就是成员变量。原则上,每一个实例都有一份成员变量的拷贝。static存在的意义就在于打破这种(成员)变量对实例的依赖,从而独立于实例而存在,成为静态变量。静态变量在需要统计实例数量的情况下常用(比如单例模式和多例模式),因为静态变量独立于实例存在,所以各个实例可以共享一个(静态)变量,用作实例的计数器。
static关键字的另一个关键作用是用来形成静态代码块以优化程序性能。static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序执行每个static块,并且只会执行一次。static块用来优化程序性能的原因在于它的特性:只会在类加载的时候执行一次。因此,很多时候会将需要进行一次性初始化操作的代码放在static代码块中执行。
static常见的应用场景包括:修饰成员变量、修饰成员方法、修饰代码块(静态代码块)、修饰类(仅限静态内部类)、静态导入(import static)。

static的独特之处

  1. static修饰的变量或者方法独立于该类的任何对象。也就是说,这些变量和方法不属于任何一个实例对象,而是被类的所有实例对象所共享。
  1. 在该类第一次被加载时,就会加载并初始化被static修饰的部分,且只在类第一次使用时进行初始化。尽管如此,这些变量或方法在后面是可以被重新赋值的。
  1. static变量在类加载时分配空间,之后创建类的对象时,不会重新分配空间。这些变量可以随意赋新值。
  1. static修饰的变量或者方法是优先于对象存在的。也就是说,当一个类加载完毕之后,即便没有创建对象,也可以访问这些静态成员。

注意事项

  1. 静态方法或静态字段只能访问静态的方法或字段。
    1. 静态方法或字段属于整个类,而不是类的特定实例。由于静态方法或字段在没有任何对象实例的情况下就可以被访问,因此它们不能直接访问非静态成员,因为非静态成员要求存在一个具体的对象实例。但是,静态方法或字段可以访问同一个类中的其他静态成员,因为这些成员不依赖于任何特定的实例。
  1. 非静态方法可以访问静态方法和静态字段,也可以访问非静态方法和非静态字段。
    1. 非静态方法属于类的一个实例,因此它可以访问该实例的非静态成员。同时,由于静态成员属于类本身而不是任何特定的实例,非静态方法也可以访问类中的静态成员。
  1. static关键字不能用于构造器。
    1. 构造器是用于创建类的实例的,而静态成员属于类级别,不依赖于任何特定实例。因此,将static应用于构造器是没有意义的,并且Java语言也不允许这样做。
  • java
  • java basics
  • 重写toString()辨析:成员变量、静态变量、局部变量
    Catalog