/*静态变量是随着类加载时被完成初始化的,它在内存中仅有一个,且JVM也只会为它分配一次内存,同时类所有的实例都共享静态变量,可以直接通过类名来访问它。*/
/*使用时机: 我们一般在这两种情况下使用静态变量:对象之间共享数据、访问方便。*/
/*局限: Static确实是存在诸多的作用,但是它也存在一些缺陷。
1、它只能调用static变量。
2、它只能调用static方法。
3、不能以任何形式引用this、super。
4、static变量在定义时必须要进行初始化,且初始化时间要早于非静态变量。*/
/*总结:
无论是变量,方法,还是代码块,只要用static修饰,就是在类被加载时就已经"准备好了",也就是可以被使用或者已经被执行,都可以脱离对象而执行。
反之,如果没有static,则必须要依赖于对象实例。*/
public class TestStatic {
/*static变量*/
private static int myNumber = 100;
/*static代码块 ,静态代码块会随着类的加载一块执行*/
static {
System.out.println("ready static");
}
/*static方法*/
private static void myMethod(){
System.out.println("ready");
}
public TestStatic() {
myNumber++;
}
public static void main(String[] args) {
System.out.println("ready main");
TestStatic testStatic1 = new TestStatic();
TestStatic testStatic2 = new TestStatic();
/*结果相等*/
System.out.println("testStatic1 : "+ TestStatic.myNumber);
System.out.println("testStatic2 : "+ TestStatic.myNumber);
}
/*而且他可以随意放,可以存在于该了的任何地方。*/
static {
System.out.println("ready static1");
}
}
输出:
ready static
ready static1
ready main
testStatic1 : 102
testStatic2 : 102