Java语言中的变量定义中有类变量和实例变量之分。
类变量用static修饰符修饰,没有用static修饰的是实例变量。
类变量属于类,而实例变量则是属于每个创建了的实例的。
类变量在类装入时建立并初始化,类变量属于类,不论基于这个类创建了多少个实例(或没有实例),类变量在内存中只保持一份。而实例变量是属于实例的,在实例创建时
建立和初始化,每一个实例都会在内存中保持一份属于自己的实例变量。
虽然类变量属于类,但是通过一个类的实例同样可以访问这个类的类变量。类变量可以被看作是能够为类中所有实例共享的变量。
而不论是实例变量还是类变量,建立时,系统都会首先自动赋予一个默认的初始值。不同类型的成员变量会有不同的默认初始值。
数值型变量的默认初始值为0,字符型的为Unicode码为0的空字符,引用类型变量则为null。null是一个具有任何引用类型的特殊文字,但null引用不涉及任何对象。
如果一个变量在定义时包含有初始化表达式,那么系统随后计算该表达式并给变量重新赋值,这种情况也被称为显示初始化变量。
类的创建过程为:
1.创建该类在内存中的内存空间。
2.加载该类的成员并赋予初始值。
3.按顺序执行该类中的所有显示初始化表达式以及静态初始化块。
对象的创建过程则为:
1.创建对象所需的内存空间。
2.加载对象的成员并赋予初始值。
3.按顺序执行该类中的所有显示初始化表达式以及实例初始化块。
4.执行该对象的构造器。
静态初始化块用static{...}修饰。而实例初始化块没有static修饰,为{...}
局部变量在相应的局部变量定义语句被执行时建立,在方法执行完毕后释放。类变量在类文件被装入初始化时建立,实例变量在实例对象被创建时建立。局部变量没有默认的
初始值,类变量和实例变量都有默认的初始值。