回归基础--- static 关键字

static 

      在Java中static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,当然也可以修饰代码块。

      Java把内存分为栈内存堆内存,其中栈内存用来存放一些基本类型的变量、数组和对象的引用堆内存主要存放一些对象。在JVM加载一个类的时候,若该类存在static修饰的成员变量和成员方法,则会为这些成员变量和成员方法在固定的位置开辟一个固定大小的内存区域,有了这些“固定”的特性,那么JVM就可以非常方便地访问他们。同时如果静态的成员变量和成员方法不出作用域的话,它们的句柄(对句柄概念有疑惑的同学点这里)都会保持不变。同时static所蕴含“静态”的概念表示着它是不可恢复的,即在那个地方,你修改了,他是不会变回原样的,你清理了,他就不会回来了。

      同时被static修饰的成员变量和成员方法是独立于该类的,它不依赖于某个特定的实例变量,也就是说它被该类的所有实例共享。所有实例的引用都指向同一个地方,任何一个实例对其的修改都会导致其他实例的变化。

static 关键字主要有以下四种使用场景:

1.修饰成员变量和成员方法: 
被 static 修饰的成员属于类,不属於单个这个类的某个对象,被类中所有对象共享,可以并且建议通过类名调用。被static 声明的成员变量属于静态成员变量,静态变量 存放在 Java 内存区域的方法区。调用格式:类名.静态变量名 类名.静态方法名()


2.静态代码块: 
  在调用类的静态参数的时候,该类的静态初始化方法会被优先调用
public class TestStatic {
    public static void main(String[] args) {

        System.out.println("实际对象中testStr值为:"+TestStaticParam.TEST_STRING);

    }
}

class TestStaticParam{


    static String  TEST_STRING  = "测试静态参数";




    //静态初始化-----2
    static {
        TEST_STRING = "测试静态初始化";
        System.out.println("TEST_STRING 被初始为->测试静态初始化");
    }

    //构造方法--------1
    public TestStaticParam() {
        this.TEST_STRING = "测试构造方法";
        System.out.println("TEST_STRING 被初始为->测试构造方法");
    }

}
结果如下:


在创建该对象的时候,静态初始化与构造方法的执行顺序为: 静态初始化方法-> 构造方法
 public static void main(String[] args) {

        TestStaticParam test = new TestStaticParam();

        System.out.println("实际对象中testStr值为:"+test.TEST_STRING);

    }

结果如下: 



3.静态内部类(static修饰类的话只能修饰内部类): 
静态内部类与非静态内部类之间存在一个最大的区别: 非静态内部类在编译完成之后会隐含地保存着一个引用,该引用是指向创建它的外围类,但是静态内部类却没有。没有这个引用就意味着:1. 它的创建是不需要依赖外围类的创建。2. 它不能使用任何外围类的非static成员变量和方法。

4.静态导包(用来导入类中的静态资源,1.5之后的新特性): 
格式为:import static 这两个关键字连用可以指定导入某个类中的指定静态资源,并且不需要使用类名调用类中静态成员,可以直接使用类中静态成员变量和成员方法。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章