首页 理论教育 Java语言程序设计-成员变量:静态变量与引用方式

Java语言程序设计-成员变量:静态变量与引用方式

时间:2023-10-18 理论教育 版权反馈
【摘要】:类体中的第2~6行是成员变量。其中,第11行代码将char类型的变量c强制转换成int类型,并输出。静态变量最经常使用的方式是通过“类名.静态变量”的形式使用,因为可以直接通过“类名.”的形式被调用,故静态变量也被称为类变量。静态变量的引用形式有两种:“类名.变量名”或者“对象名.变量名”。

Java语言程序设计-成员变量:静态变量与引用方式

成员变量是在类体中定义的变量,也称为全局变量。根据成员变量的类型前面是否有static关键字,将成员变量分为静态变量和实例变量两种。

1.静态变量

静态变量又称类变量,数据类型前面有static修饰。static的英文含义就是“静态的”,因此,当成员变量的数据类型前面有static修饰时,称此时的成员变量为静态成员变量,也称为类变量。静态变量的示例代码如下:

上述代码的运行结果为:

第1行代码中定义了一个称作Static Variable Test的类。类体中的第2~6行是成员变量。第7~14行是成员方法,只不过这个成员方法比较特殊,是Java程序的入口main方法。第2行中的成员变量是一个整型变量a,与以往不同的是,在int的前面添加了static关键字,此时a就变成了成员变量中的静态变量。与此相同,第3~6行,分别定义了double类型、char类型、boolean类型和String类型的静态成员变量。第8~13行代码,在主方法中输出了静态变量a、b、c、d、e的值。其中,第11行代码将char类型的变量c强制转换成int类型,并输出。

从程序的运行结果看,虽然我们没有给静态的成员变量赋初值,但是系统会自动根据数据类型给静态的成员变量赋值。整型的静态变量默认值是0,实型的静态变量默认值是0.0,字符型的静态变量默认值是空字符,其ASCII值为0,所以在输出结果中字符c的值:后面什么也没有,而字符c转换成整数为:后面是0。布尔型的静态变量默认值是false。而字符串等一切的引用型的静态变量默认值是null。

2.实例变量

成员变量的数据类型前面有static修饰时,称为静态的成员变量,简称静态变量。那么,当成员变量的数据类型前面没有static修饰时,就称为实例变量。实例变量的示例代码如下:

InstanceVariableTest类和StaticVariableTest类的内容区别之处在于:InstanceVariableTest类的第2~6行的数据类型前面都没有static修饰,因此第2~6行的成员变量就变成了实例变量,但是第8~13行的代码会报错。运行Instance Variable Test,报的错误是Java:无法从静态上下文中引用非静态变量。这是怎么回事呢?这就是静态变量和实例变量的第一点区别。第7行代码是main方法,其中在方法类型void前面有static修饰,说明main方法为静态的成员方法。Java中有一条很重要的规则是:静态成员不能访问非静态成员。根据这条规则,main方法是静态成员方法,也就是静态成员,而变量a、b、c、d、e为实例变量,也就是非静态成员,故在main 方法中使用实例变量会报错。那么,我们怎么才能输出实例变量呢?将Instance VariableTest类改为InstanceVariableTest1类,代码如下:

上述代码的运行结果如下:

InstanceVariableTest1与Instance Variable Test的区别在于第8~14行的不同。第8行代码,用Instance Variable Test1类创建了实例instanceVariableTest。在第9~14行代码中,通过引用运算符“.”,instance Variable Test对象引用了a、b、c、d、e实例变量。

这就是静态变量和实例变量的第二点区别:实例变量只能通过实例引用,而静态变量可以直接使用。静态变量最经常使用的方式是通过“类名.静态变量”的形式使用,因为可以直接通过“类名.”的形式被调用,故静态变量也被称为类变量。类变量的示例代码如下:(www.xing528.com)

上述代码的运行结果如下:

Static Variable Test1 和 Static Variable Test 的区别在于:第8 ~13 行的代码,Static VariableTest1中第8~13行是通过“类名.”的形式引用了静态变量。

静态变量和实例变量还有一个很重要的区别:分配内存空间的时间以及生命周期不同。在类加载时,内存就会给静态变量分配内存空间,而且该类的所有对象共用这块内存空间。实例变量是在创建对象时,内存才会给其分配内存空间,而且所有对象的实例变量所占的内存单元不同。示例代码如下:

上述代码的运行结果如下:

VariableDifference中第2行定义了一个静态变量a,第3行定义了一个实例变量b,两个变量均未赋初值,其默认值均为0。故第7~10行代码输出的值为0。第11行代码给实例variableDifference1的静态变量a赋值为10,因为所有实例共享一个静态变量,故第13行和第15行输出语句中的值均为10。第12代码给实例variable Difference1的实例变量b赋值为20,而所有实例的实例变量占不同的内存单元,故第14行和第16行输出语句中的值分别为20和0。另外,要注意第7行和第9行代码中输出实例的静态变量时,采用的是“对象名.变量名”的形式。

静态变量和实例变量的区别如下:

(1)静态变量的数据类型前面有static,而实例变量的数据类型前面没有static。

(2)静态变量的引用形式有两种:“类名.变量名”或者“对象名.变量名”。实例变量的引用形式只有“对象名.变量名”。

(3)静态变量是在类加载时,就会被分配内存空间,并且该类的所有实例的静态变量共享一块内存空间。而实例变量是在创建对象的时候才会被分配内存空间,而所有对象的实例变量占有不同的内存空间。

(4)静态变量和类共存亡,而实例变量和实例共存亡。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈