基本概念
通常情况下成员变量都隶属于对象层级,每个对象都拥有独立的内存空间来记录自己独有的成员变量,当所有对象的成员变量值都完全一样时,若每个对象单独记录则会造成内存空间的浪费,此时应该将该成员变量有对象层级提升到类层级,在内存空间中只保留一份而且被所有对象共享,为了实现该效果则使用static关键字修饰,表示静态的含义。
static关键字可以修饰成员变量和成员方法表示隶属于类层级,推荐使用类名. 的方式
使用方式
(1)对于非静态的成员方法来说,既可以访问非静态的成员也可以访问静态的成员。
(成员:成员变量+成员方法)
(2)对于静态的成员方法来说,只能访问静态的成员不能访问非静态的成员。
(执行静态方法可能还没有创建对象,非静态成员隶属于对象层级)
(3)只有被所有对象共享的内容才能加static,static不能滥用。
区分有static修饰和没有static修饰的区别
public class TestStatic{
private int cnt = 1; //隶属于对象层级,每个对象都拥有独立的一份
private static int snt = 2; //隶属于类层级,所有对象共享同一份
public void show(){ //隶属于对象层级,使用对象.的方式访问
System.out.println("cnt = " + this.cnt); //ok 1
System.out.println("snt = " + this.snt); //ok 2
}
public static void test(){ //隶属于类层级,使用类名.的方式访问
//System.out.println("cnt = " + cnt); //error
System.out.println("snt = " + snt); //ok 2
}
public static void main(String[] args){
TestStatic ts = new TestStatic();
ts.show();
}
}