(1)设置变量的存储域,函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值;
(2)限制变量的作用域,在模块内的static全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问;
(3)限制函数的作用域,在模块内的static函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明它的模块内;
(4)在类中的static成员变量意味着它为该类的所有实例所共享,也就是说当某个类的实例修改了该静态成员变量,其修改值为该类的其它所有实例所见;
(5)在类中的static成员函数属于整个类所拥有,这个函数不接收this指针,因而只能访问类的static成员变量。
https://gitee.com/SnailClimb/JavaGuide/blob/master/docs/java/Basis/final、static、this、super.md
参考代码:
package cn.pckj.homework;
public class MyClass {
private static int a;
private int b;
public void Result(){
System.out.println("a="+a+";");
System.out.println("b="+b+";");
}
public static void main(String[] args) {
MyClass obj1,obj2;
obj1 = new MyClass();
obj2 = new MyClass();
obj1.Result();//a = 0; b = 0;
obj1.a = 60;
obj1.b = 3;
obj2.a = 100;
obj2.b = 9;
obj1.Result();
obj2.Result();
//执行结果:
//a=0; b=0; a=100; b=3; a=100; b=9; 有static int a;
//a=0; b=0; a=60; b=3; a=100; b=9 没有static int a;
}
}
//例二:
package cn.pckj.homework;
public class Tom {
private float weight;
//private String name;//不能对非静态字段Tom.name进行静态引用
private static String name;
public void setWeight(float weight){
this.weight = weight;
}
private void out(){
System.out.println(name+"体重"+weight+"斤");
}
public static void main(String[] args) {
Tom.name = "汤姆猫";
Tom cat = new Tom();
cat.setWeight(20);
cat.out();
}
}