什么是static
Java中并不存在全局变量的概念,但是我们可以通过static实现一个“伪全局”的概念,static可以用来修饰方法,变量和代码块。
Java把内存分为堆内存和栈内存,其中栈内存用来存放基本数据类型变量,数组和对象引用;堆内存用来存放对象;JVM加载一个类时,若该类存在static修饰的方法,变量则会为其在固定位置开辟一块内存区域。static具有不可恢复性。同时被static修饰的成员变量和成员方法不依赖于类。所有实例的引用都指向同一个地方,对其一个实例修改,其它实例都会发生相应改变
public static int number = 0;
public TestString() {
number ++;
}
public static void main(String [] args0){
TestString testString1 = new TestString();
TestString testString2 = new TestString();
System.out.println(testString1.number);
System.out.println(testString2.number);
}
输出结果
2
2
static的用法
static修饰的成员变量和静态方法,直接通过类名来加载。static修饰的代码块表示静态代码块,当JVM装载类的时候,就会执行这块代码,其用处非常大。
- static修饰变量
静态变量随着类的加载完成初始化,在内存中仅有一份,且JVM也只会为他分配一次内存,同时类所有的实例都共享静态变量。实例变量每创建一个实例都会创建一个实例变量。
使用场景:对象之间共享数据 - static修饰方法
static方法是必须实现的不能与abstract共用。 - static修饰代码块
静态代码块会随着类的加载一块执行,它可以在代码中实现的位置没有关系。
static的局限
- 只能调用static变量和方法
- 不能以任何形式引用this,super
- static在定义时就要对其初始化
总结
无论是修饰变量,方法还是代码块。只要用static修饰。都会在类加载时就准备好,可以不用依赖于对象。反之,必须依赖于对象实例。
网友评论