同一类的全部实例的静态变量共享用一块内存区。java
但两个jvm之间并不会共享数据。类被加载以后,系统为之生成一个对应的class对象。jvm
1.类的加载spa
将类的class文件读入内存,并建立class对象。对象
2.链接接口
链接的过程分为三步:内存
(1)验证虚拟机
被加载的类的内部结构是否正确、协调。编译
(2)准备class
为类变量分配内存并设置默认初始值。变量
(3)解析
将类的二进制数据中的符号引用替换成直接引用。
3.初始化
虚拟机负责对类进行初始化,主要对类变量进行初始化。
1.声明类变量时指定初始值。
2.使用静态初始化块为类变量。
jvm初始化一个类包含如下几个步骤:
1.若是这个类尚未被加载和链接,则先加载并链接该类。
2假如该类的直接父类尚未被初始化则先初始化其直接父类。
那么系统在何时才会初始化类尼?
当java程序首次经过下面6种方式使用类或者接口时,系统会初始化该类和接口的。
(1)建立类的实例,包括new操做符来建立实例,经过反射来建立,反序列。
(2)调用某个类的类方法(静态方法)
(3)访问某个类或接口的类变量或为该类变量赋值。
注:对于final型的类变量,若是该类变量的值在编译时就能够肯定下来。不会致使类的初始化。