static 存在的主要意义
static 的主要意义是在于创建独立于具体对象的域变量或者方法。以致于即使没
有创建对象,也能使用属性和调用方法!
static 关键字还有一个比较关键的作用就是 用来形成静态代码块以优化程序性
能。static 块可以置于类中的任何地方,类中可以有多个 static 块。在类初次
被加载的时候,会按照 static 块的顺序来执行每个 static 块,并且只会执行一
次。
为什么说 static 块可以用来优化程序性能,是因为它的特性:只会在类加载的时
候执行一次。因此,很多时候会将一些只需要进行一次的初始化操作都放在
static 代码块中进行。
static 的独特之处 1、被 static 修饰的变量或者方法是独立于该类的任何对象,也就是说,这些变
量和方法不属于任何一个实例对象,而是被类的实例对象所共享。
怎么理解 “被类的实例对象所共享” 这句话呢?就是说,一个类的静态成员,
它是属于大伙的【大伙指的是这个类的多个对象实例,我们都知道一个类可以创
建多个实例!】,所有的类对象共享的,不像成员变量是自个的【自个指的是这
个类的单个实例对象】…我觉得我已经讲的很通俗了,你明白了咩?
2、在该类被第一次加载的时候,就会去加载被 static 修饰的部分,而且只在类
第一次使用时加载并进行初始化,注意这是第一次用就要初始化,后面根据需要
是可以再次赋值的。
3、static 变量值在类加载的时候分配空间,以后创建类对象的时候不会重新分
配。赋值的话,是可以任意赋值的!
4、被 static 修饰的变量或者方法是优先于对象存在的,也就是说当一个类加载
完毕之后,即便没有创建对象,也可以去访问。
static 应用场景
因为 static 是被类的实例对象所共享,因此如果某个成员变量是被所有对象所
共享的,那么这个成员变量就应该定义为静态变量。
因此比较常见的 static 应用场景有:
1、修饰成员变量 2、修饰成员方法 3、静态代码块 4、修饰类【只能修饰内部
类也就是静态内部类】 5、静态导包
static 注意事项
1、静态只能访问静态。 2、非静态既可以访问非静态的,也可以访问静态的