1、Java程序的变量大体可分为成员变量和局部变量。
类体内定义的变量被称为成员变量。如果定义该成员变量时没有使用static修饰,该成员变量又称为非静态变量或实例变量;如果使用了static修饰,则该成员变量又可被成为静态变量或类变量。
局部变量:包括如下三类1、形参 2、方法内的局部变量 3、代码块内的局部变量 ; 局部变量的作用时间很短,它们都被存储在方法的栈内存中。
2、Java要求定义成员变量时必须采用合法的前向引用。 如果一个是实例变量,一个是类变量,则实例变量总是可以引用类变量因为类变量的初始时机总是处于实例变量的初始化时机之前。
3、在同一个JVM内,每个类只对应一个Class对象,但每个类可以创建多个Java对象。 由于同一个JVM内每个类只对应一个Class对象,因此同一个JVM内的一个类的类变量只需要一块内存空间,但对于实例变量而言,该类每创建一次实例,就需要实例变量分配一块内存空间。也就是说,程序中有几个实例,实例变量就需要几块内存空间。
4、实例变量的初始化时机:从程序运行的角度来看,每次创建Java对象都会为实例变量分配内存空间,并对实例变量执行初始化。
从语法角度来看,程序可以在3个地方对实例变量执行初始化:1、定义实例变量时指定初始化;2、非静态初始化块中实例变量指定初始值;3、构造器中对实例变量指定初始值。其中第1、2种方式(定义时指定的初始值和非静态初始化块指定的初始值)比第3种方式(构造器中指定的初始值)更早执行但第1、第2种方式的执行顺序与它们在源程序中的排列顺序相同。