9. static关键字

版权声明:作者:changshuchao https://blog.csdn.net/changshuchao/article/details/88406628
/*静态变量是随着类加载时被完成初始化的,它在内存中仅有一个,且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

猜你喜欢

转载自blog.csdn.net/changshuchao/article/details/88406628