java - 关键字 static

2017-08-08  本文已影响12人  司鑫
一 static 代表着什么

在 java 中,static 表示静态的意思,并不是全局的意思,在 java 中不存在所谓的全局变量的概念。static 可以用来修饰成员变量、成员方法和代码块。当 JVM 加载一个类的时候,若该类中含有静态的成员变量或成员方法时,那么这些变量和方法就会被保存在一个“方法区”中,供全局调用,只有一份。

二 堆栈、堆、方法区(范围和存储信息)

堆栈

方法区/静态区

三 static 的使用

static 成员变量

static 变量会随着类的加载被初始化,它在内存中只存在一份,可以通过类名直接来访问。

static 成员方法

static 的初始化和 static 成员变量一样。static 方法不可以被 abstract 修饰,因为 static 方法在类加载的时候就已经存在了。

static 代码块

static 代码块也被称为是静态代码块,随着类的加载而被执行,可以放在类中的任何位置。
static 代码块和 static 方法最大的不同就是

四 对象的初始化顺序

先来看段代码

class Parent {
    static String name = "hello";

    {
        System.out.println("parent block");
    }

    static {
        System.out.println("parent static block");
    }

    public Parent() {
        System.out.println("parent constructor");
    }
}

class Child extends Parent {
    static String childName = "hello";

    {
        System.out.println("child block");
    }

    static {
        System.out.println("child static block");
    }

    public Child() {
        System.out.println("child constructor");
    }
}

public class StaticIniBlockOrderTest {

    public static void main(String[] args) {
        new Child();//语句(*) 
    }
}
/**output
 parent static block
 child static block
 parent block
 parent constructor
 child block
 child constructor
**/

顺序:

  1. 执行父类中的静态代码块
  2. 执行本类中的静态代码块
  3. 执行父类中的非静态代码块
  4. 执行父类中的构造方法
  5. 执行本类中的非静态代码块
  6. 执行本类中的构造方法
上一篇 下一篇

猜你喜欢

热点阅读