简述:在java中我们经常使用static关键字,该关键字就相当于是全局变量(静态变量或者是类变量)。
(1)当在类中的方法或者是变量前加上static时,那么这个方法或者变量只有‘一份’,在此后的类的各种对象中也是共用一份这个static所修饰的方法或者是变量(直接通过类名访问),相比于父类中其他的非static变量或者是方法,当其对象产生时,对象中会自己备份一份非static变量或者是方法(被所有的类实例共享)。所以从这个角度看,static实际上可以节约内存空间,但是会一直占用内存空间,直到程序退出内存为止。
(2)静态方法中不能调用非静态方法,非静态方法中既可以调用静态方法或变量也可以调用非静态方法或者是变量。
(3)用static修饰的代码块表示静态代码块,当Java虚拟机(JVM)加载类时,就会执行该代码块(用处非常大哦)。
(4)所以一般在需要实现以下两个功能时使用静态变量: 在对象之间共享值时;方便访问变量时。
代码示例:
public class Teststatic { int a; double b; static int c; static double d; public static void test() { // b=2;//错误写法:因为静态方法不能调用非静态变量 c = 3;// 静态方法当然可以调用静态变量咯 System.out.println("引用静态变量成功!" + "c" + "=" + c); } public static void main(String[] args) { // TODO Auto-generated method stub Teststatic.d = 5.6;//直接通过类来调用静态变量 System.out.println(Teststatic.d); Teststatic.test();// 说明静态方法或变量直接属于类属性,可以直接调用而不需要通过对象调用。 }}
附上static的内存分析图: