🐿️static关键字
2021-3-5
| 2023-8-3
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
Property
 

静态字段

在一个class中定义的字段为实例字段。实例字段的特点是,每个实例都有独立的字段,各个实例的同名字段互不影响。
还有一种字段,用static修饰的字段,称为静态字段(static field
 
实例字段在每个实例中都有自己的一个独立“空间”;静态字段只有一个共享“空间”,所有实例都会共享该字段:
 
对于静态字段,无论修改哪个实例的静态字段,效果都是一样的:所有实例的静态字段都被修改了,原因是静态字段并不属于实例:
notion image
虽然实例可以访问静态字段,但是它们指向的其实都是Person class的静态字段。所以,所有实例共享一个静态字段。
因此,不推荐用实例变量.静态字段去访问静态字段,因为在Java程序中,实例对象并没有静态字段。在代码中,实例对象能访问静态字段只是因为编译器可以根据实例类型自动转换为类名.静态字段来访问静态对象。
推荐用类名来访问静态字段,可以把静态字段理解为描述class本身的字段(非实例字段)。对于上面的代码,更好的写法是:
 

静态方法

有静态字段,就有静态方法。用static修饰的方法称为静态方法。
调用实例方法必须通过一个实例变量,而调用静态方法则不需要实例变量,通过类名就可以调用。静态方法类似其它编程语言的函数。例如:
因为静态方法属于class而不属于实例,因此,静态方法内部,无法访问this变量,也无法访问实例字段,它只能访问静态字段。
通过实例变量也可以调用静态方法,但这只是编译器自动帮我们把实例改写成类名而已。
通常情况下,通过实例变量访问静态字段和静态方法,会得到一个编译警告。
 
静态方法经常用于工具类,例如:Arrays.sort() Math.random()
静态方法也经常用于辅助方法。注意到Java程序的入口main()也是静态方法。
 

static代码块

static关键字还有一个比较关键的作用就是用来形成静态代码块以优化程序性能。static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次
 
 

接口的静态字段

因为interface是一个纯抽象类,所以它不能定义实例字段,但是可以有静态字段,并且静态字段必须为final类型:
实际上,因为interface的字段只能是public static final类型,所以可以把这些修饰符都去掉简写为:
 
  • Java
  • 接口包package
    目录