Static关键字可以用来修饰:成员变量、方法、构造代码块
静态成员变量
当我们要访问普通成员变量时,我们可以通过实例来进行访问:
public class Demo07_static_chengyuanbl {
public static void main(String[] args) {
//访问普通成员变量
Counter c1=new Counter();
c1.value++;
Counter c2=new Counter();
c2.value++;
c2.value++;
c2.value++;
System.out.println("c1的value="+c1.value);
System.out.println("c2的value="+c2.value);
}
}
class Counter{
//成员变量
int value;//普通成员变量(通过实例访问)
}
输出结果:
c1的value=1
c2的value=3
那么,当用static关键字来修饰一个成员变量时,我们这个成员变量称为:静态成员变量。当我们想访问一个成员变量时,既可以通过实例来访问,也可以通过类名来访问:
public class Demo07_static_chengyuanbl {
public static void main(String[] args) {
//通过实例访问
Counter c1=new Counter();
c1.count++;
//通过类名访问
Counter.count++;
System.out.println("c1的count="+c1.count);
}
}
class Counter{
//静态成员变量
static int count;
}
输出结果:c1的count=2
那我们再来看一个实例,c1和c2的输出结果分别是几呢?:
public class Demo07_static_chengyuanbl {
public static void main(String[] args) {
Counter c1=new Counter();
c1.count++;
Counter c2=new Counter();
c2.count++;
c2.count++;
c2.count++;
System.out.println("c1的count="+c1.count);
System.out.println("c2的count="+c2.count);
}
}
class Counter{
//成员变量
static int count;
}
输出结果:
c1的count=4
c2的count=4
为什么c1只进行了一次++,c2进行了三次++,但是结果却是4呢?普通成员变量在每次new一个实例时,这个实例就会拥有一个自己独立的“空间”,但是静态成员变量只拥有一个共享的“空间”,所有new的实例都共享该成员变量,所以相当于实例对象c1先对静态成员变量count++了一次,实例对象c2又对静态成员变量count++了三次,由于他们共享count,所以c1和c2的值均为4。对于静态成员变量,无论修改了那个实例的值,都是访问的相同的内存空间,即所有实例的静态成员变量都被修改了,原因是静态成员变量不属于实例。
虽然实例可以访问静态成员变量,但是他们都指向同一个静态成员变量,所以推荐使用类名来访问成员变量。
静态方法
是