前两天朋友问我成员变量前边加static和不加static有什么区别,我把书给她看,书上是这么解释静态成员变量的:
如果我们在成员变量前边加上static关键字,这个变量就成为静态成员变量,我们又把这种变量叫做“类变量”,因为这样的变量在这个类的所有对象里只有一个,这个类的所有对象“共享”同一个类变量。因此,一旦通过某个对象修改了静态变量的值,这个类的所有其他对象里面,这个静态变量的值就跟着变了。
书上已经说得很清楚了,但为了方便理解,我写了两段简单的代码来帮助更好理解静态成员变量和非静态成员变量的区别。
package test2;
public class Test_Static {
private static int i = 100;
public int getI() {
return i;
}
public void setI(int i) {
this.i = i;
}
public void setI(int j, int k) {
Test_Static m = new Test_Static();
m.setI(j);
i = m.getI() + k;
}
public static void main(String[] args) {
Test_Static a = new Test_Static();
a.setI(200);
Test_Static b = new Test_Static();
b.setI(b.getI(), 100);
System.out.println(b.getI());
}
}
控制台输出结果如下:
package test2;
public class Test_NoStatic {
private int i = 100;
public int getI() {
return i;
}
public void setI(int i) {
this.i = i;
}
public void setI(int j, int k) {
Test_NoStatic m = new Test_NoStatic();
m.setI(j);
i = m.getI() + k;
}
public static void main(String[] args) {
Test_NoStatic a = new Test_NoStatic();
a.setI(200);
Test_NoStatic b = new Test_NoStatic();
b.setI(b.getI(), 100);
System.out.println(b.getI());
}
}
控制台输出结果如下:
可以简单地说:成员变量 i 前边加了static,就可以理解为这个类里只有这一个变量,所以任意一个对象修改它的值它的值都会改变;成员变量 i 前边不加static,每个对象都有自己的 i ,修改自己的 i 不会改变另一个对象的 i 的值。