变量和方法都可以被声明为static类型。被声明static的变量叫做类变量,也叫静态变量,这个变量属于类,不属于任何一个对象。
没有被static修饰的变量为实例变量,属于各对象。
同样被static修饰的方法叫做类方法,属于类。没有被static修饰的方法称为实例方法,属于对象。
不管创建了多少对象实例,整个类中,系统只给静态变量分配一个空间,所有对静态变量的操作都是对这一空间值得操作。
对比下面两段程序便可弄清楚。
package fuckdefault;
class Test1
{
public int i = 20;
void changeI()
{
i ++;
}
}
public class TestStatic {
public static void main(String[] args) {
Test1 a = new Test1();
Test1 b = new Test1();
a.changeI();
System.out.println("a中的i:" + a.i);
System.out.println("b中的i:" + b.i);
}
}
输出结果:
a中的i:21
b中的i:20
package fuckdefault;
class Test2
{
public static int i = 20;
void changeI()
{
i ++;
}
}
public class TestStatic2 {
public static void main(String[] args) {
Test2 a = new Test2();
Test2 b = new Test2();
a.changeI();
System.out.println("a中的i:" + a.i);
System.out.println("b中的i:" + b.i);
}
}
输出结果:
a中的i:21
b中的i:21
比较可知,Test2中的i是静态变量(类变量)。系统只分配一个空间,对象a的操作就是对这个空间值得操作。于是对象b中的i值变化了。