static可以修饰变量、方法、代码块
-
静态变量
static修饰的变量被称为静态变量,普通成员的变量(属性)需要实例化之后才能使用
而静态变量不属于某个类的示例,而是属于类(因此也被称为类变量),只要程序加载了类的字节码,在不需要创建实例的前提下,就可以被分配空间并被访问调用
public class Person{
public String name;
public static String country="China";
}
在上例中,一个国家会有很多人,很多人都会属于一个国家,如果这个国家改变,那么所有人的所属国都将被更改,此时我们需要堆这个变量提升访问级别,使人们对这个属性进行公用
因此,static修饰的变量是线程共享的
-
静态方法
通过static关键字修饰的方法,称为静态方法
静态方法会随着类的定义而被分配和装载入内存中,可以通过类直接调用
非静态方法属于对象的具体实例,只有在类的对象创建时,在对象的内存中才有这个方法的代码段
public class Person{
public static void hello(){
}
}
我们可以直接通过 Person.hello 进行调用
-
访问规则
普通方法、静态方法、静态成员变量交叉访问的情况下,规则如图