在Java语言中,根据定义变量位置的不同。可以将变量分成2大类:成员变量和局部变量。成员变量和局部变量运行机制存在较大差异。
成员变量指的是在类范围里定义的变量,也就是前面所说的属性;局部变量指的是在一个方法内定义的变量。不管是成员变量,还是局部变量,都应该遵守相同的命名规则:从语法角度来看,只要是一个合法的标识符即可,但从程序可读角度来看,应该是多个有意义的单词连缀而成,其中第一个单词首字母小写,后面每个单词首字母大写。java程序中的变量可被划分为:
正是基于这个原因,我们把类属性和实例属性统称为成员变量,其中类属性可以理解为类成员变量,它作为类的一个成员,与类共存亡;实例属性则可理解为实例成员变量,它作为实例的一个成员,与实例共存亡。
只要类存在,程序就可以访问该类的类属性,在程序中访问类属性语法:
类.类属性
只要实例存在,程序就可以访问该实例的实例属性,在程序中访问实例属性语法:
实例.实例属性
类属性也可以让该类的实例来访问,通过实例来访问类属性的语法
实例.类属性
但这个实例访问并不是这个实例的属性,依然是访问它对应类的类属性。也就是说,如果通过一个实例修改了类属性的值,由于这个类属性的结果完全相同,这会导致该类的其他实例来访问这个类属性时也将获得这个被修改过的值。
下面程序定义了一个Person类,在这个Person类中定义两个成员变量,一个实例属性:name,以及一个类属性:eyeNum。
下面再提供一个TestPerson类来创建Person实例,并分别通过Person类和Person实例来访问实例属性和类属性
局部变量根据定义形式的不同,又被分为如下三种:
1.形参在定义方法签名时定义的变量,行参的作用域在整个方法内有效。
2.方法局部变量:在方法体内定义的局部变量,它的作用域是从定义该变量的地方生效,到该方法结束时实效。
3.代码块局部变量:在代码块中定义的局部变量,这个局部变量的作用域从定义该变量的地方生效,到该代码块结束时实效。
与成员变量不同的是,局部变量除了形参之外,都必须显式初始化。也就是说,必须先给方法局部变量和代码块局部变量指定初始值,否则不可以访问它们。
下面代码块是定义代码块局部变量的实例程序
对于方法局部变量,其作用域从定义该变量开始,直到该方法结束。以下示范了方法局部变量的作用域