`
beckshanling
  • 浏览: 262790 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

实例成员变量和静态成员变量

    博客分类:
  • C++
阅读更多

      所有的对象都是实例成员变量。它们的最大特色是:如果所属的对象没有被创建,它们也就不存在。 如果在类的外部使用它,需要先创建一个对象,然后通 过"对象名.变量名"来访问。在类的内部,实例成员方法也可以直接访问实例成员变量。

      不同的对象,拥有不同的实例成员变量,它们互不干扰。

【例1】 不同对象的实例成员变量使用示例。

//-----------文件名instanceVar.java,程序编号3.15------------------
public class instanceVar{
protected int instVar=0;  //定义一个实例成员变量
}

下面这个类showInstVar用两个对象来访问它的实例成员变量。

//-----------文件名showInstVar.java,程序编号3.16------------------
public class showInstVar{
public static void main(String args[]){
instanceVar one = new instanceVar();  //创建对象one
instanceVar two = new instanceVar();  //创建对象two
//分别为这两个对象的成员变量赋值
one.instVar = 100;
two.instVar = 200;
//分别显示这两个对象的成员变量值
System.out.println("one.instVar="+one.instVar);
System.out.println("two.instVar="+two.instVar);
}
}

程序3.16输出的结果如下:

one.instVar=100
two.instVar=200

从本例中明显地看出,不同对象的成员变量是不相同的,它们互不干涉。

2.静态成员变量

在某些情况下,程序员希望定义一个成员变量,可以独立于类的任何对象,即所有的对象都共用同一个成员变量 。由于Java中不能像C一样定义全局变量,因此,Java中引入了静态成员变量。

在成员变量前加上static标识符就可以定义一个静态成员变量。

相对于实例成员变量,静态成员变量具有以下特点:

       它被类的所有对象共享,因此又被称为类变量。

       它不是属于某个具体对象,也不是保存在某个对象的内存区域中,而是保存在类的公共存储单元。因此,可以在类的对象被创建之前就能使用。

它既可以通过"对象名.变量名"方式访问,也可以通过"类名.变量名"的方式访问 。它们是完全等价的。

【例2】 静态成员变量使用示例。

//-----------文件名staticVar.java,程序编号3.17------------------
public class staticVar{
protected static int stat=0;  //定义一个静态成员变量
}

下面这个程序使用不同的方法来访问这个静态变量。

//-----------文件名showStaticVar.java,程序编号3.18------------------
public class showStaticVar{
public static void main(String args[]){
staticVar.stat=100;  //通过类名.变量名访问静态变量,无需创建对象
System.out.println("staticVar.stat="+staticVar.stat);
staticVar one = new staticVar();  //创建对象one
staticVar two = new staticVar();  //创建对象two
//分别为这两个对象的静态成员变量赋值
one.stat = 200;
two.stat = 300;
//分别显示这两个对象的静态成员变量值
System.out.println("one.stat="+one.stat);
System.out.println("two.stat="+two.stat);
//再通过类来显示静态变量的值
System.out.println("staticVar.stat="+staticVar.stat);
}
}

程序3.18输出结果如下:

staticVar.stat=100
one.stat=300
two.stat=300
staticVar.stat=300

从上述结果中可以看到,静态变量stat是一个公共变量,无论哪个对象改变了它的值,对其他所有该类对象都有效。静态变量的一个重要作用是当作同类 各个对象之间传递信息使用,类似于C语言中的全局变量。但这样破坏了数据的封装原则,往往会留下隐患,所以使用这类变量时需要万分谨慎。

静态变量的另一个用途是定义静态常量,比如:

public static double PI = 3.1415926;


这样的静态常量可以无需创建对象就直接使用,省略了创建对象的步骤,类似于C语言中用define定义的常量。这样定义常量,不仅使用方便,而且节省内存空间。在JDK中,存在着大量的这种静态常量。

分享到:
评论

相关推荐

    C++类中的静态成员变量和静态成员函数的作用

    其中,静态成员变量和静态成员函数具有特殊的特性,它们在类的整个生命周期内共享单一实例,并且可以在不创建类实例的情况下被访问。 #### 一、静态成员变量 静态成员变量是在类的外部定义的变量,它不属于任何...

    静态成员变量和静态成员函数

    在编程语言中,如C++或Java,`static`关键字有着重要的作用,它主要用于定义静态成员变量和静态成员函数。本文将深入解析`static`的关键特性,并探讨它们在面向过程和面向对象编程中的应用。 首先,静态成员变量,...

    C++静态成员变量和静态成员函数

    静态成员变量和静态成员函数都是C++中非常有用的特性,它们可以帮助我们更有效地管理和组织代码。通过合理地利用这些特性,可以显著提高程序的性能并简化代码结构。无论是实现对象计数还是执行与类相关的操作,这些...

    类中静态成员变量和普通变量的区别——实例代码(VS2010)

    在编程语言中,如C++或Java,类的成员变量分为两种主要类型:静态成员变量(Static Member Variables)和非静态成员变量(也称为实例变量)。这两种变量在使用和存储方式上存在显著差异,这对于理解和编写高效、清晰...

    Java成员变量局部变量静态变量成员方法全局方法等概念的区

    成员变量和局部变量用于存储数据,而成员方法和静态方法则用于执行操作。在设计类时,应根据数据和行为的关联来决定变量和方法的类型。合理地使用静态和非静态成员,可以帮助优化内存使用,同时保持代码的整洁和高效...

    Java 成员变量和局部变量

    非静态成员变量则是每个实例独有的。 4. **this关键字**: 在方法中,使用`this`关键字可以引用当前对象的成员变量,以区分方法参数或其他局部变量。 **局部变量** 局部变量是在方法、构造器或初始化块中声明的...

    C++静态成员函数与静态成员变量小结

    "C++静态成员函数与静态成员变量小结" 静态成员在C++中扮演着重要的角色,包括静态数据成员和静态函数成员两部分。静态成员是指在类体中使用static修饰符声明的成员,可以直接使用类名+静态成员名访问该静态成员。...

    静态方法,静态成员变量的调用

    它们只能访问类中的静态成员变量和静态方法,不能访问实例成员变量或实例方法。这是因为在静态方法执行时,没有特定的对象实例,所以无法访问与特定对象相关的实例变量。相反,实例方法没有这样的限制,它们既可以...

    PHP静态成员变量和非静态成员变量详解

    在PHP编程语言中,类的成员变量分为静态成员变量和非静态成员变量,这两种变量有着不同的特性和使用场景。理解这些概念对于编写面向对象的PHP代码至关重要。 **静态成员变量**: 1. 静态成员变量是通过在变量前添加...

    c++静态成员使用实例

    在C++中,静态成员函数可以被类的所有对象共享,它并不持有隐含的`this`指针,因此不能访问非静态成员变量。静态成员函数通常用于执行与对象状态无关的操作,如计算、比较等。例如,在`静态成员函数.cpp`中,可能会...

    java 利用反射获取内部类静态成员变量的值操作.docx

    2. **静态成员变量**:静态成员变量是类级别的变量,可以通过类名直接访问,不需要创建类的实例。 3. **反射**:反射是在运行时检查类、接口、字段和方法等的能力,通常用于实现动态代理或需要动态加载类的场景。 #...

    CC++中的静态全局变量,静态局部变量,全局变量,局部变量的区别

    在面向对象编程中,`static`关键字用于定义静态成员变量和静态成员函数。 #### 静态数据成员 静态数据成员是类的公共或私有成员,但属于类而非任何特定的对象实例。这意味着无论创建多少个类的实例,静态数据成员都...

    java 使用静态成员变量计算内存中实例化的对象数目

    本篇文章将详细讲解如何利用静态成员变量来追踪和计算一个类在运行时创建的实例数量。 首先,让我们理解静态成员变量的概念。在Java中,静态修饰符用于声明类级别的变量或方法,这意味着它们属于类本身,而不是类的...

    C++静态成员函数不能调用非静态成员变量(详解)

    相反,非静态成员变量和非静态成员函数是与类的每个实例相关联的。每个类对象都有自己的非静态成员变量副本,这些副本在内存中独立存储。非静态成员函数拥有一个隐含的`this`指针,该指针指向调用该函数的对象实例,...

    详解c++ 静态成员变量

    静态成员变量的声明通常在类定义内部,而定义和初始化则需要在类的外部进行,这是因为它们的生命周期贯穿整个程序,而不是随着类的实例化和析构而创建或销毁。 首先,我们来看一下静态成员变量的声明和定义。在类...

    C# 公有变量 私有变量 静态变量

    // 不需要实例化类就能访问静态变量和方法 Console.WriteLine(MyClass.StaticVar); // 输出10 MyClass.ModifyStaticVar(); Console.WriteLine(MyClass.StaticVar); // 输出11 ``` 在实际编程中,正确选择变量的访问...

    Java复习题(二)填空题(附答案) (3).docx

    7. **成员变量分类**:Java 中的成员变量分为实例成员变量和静态成员变量,其中实例成员变量与对象关联,静态成员变量属于类。 8. **重载**:在 Java 中,如果一个类中有多个方法具有相同的名字和类型,但参数列表...

    C++静态成员变量和静态成员函数的使用方法总结

    在C++编程语言中,静态成员变量和静态成员函数是类的重要组成部分,它们与非静态成员有着显著的区别。本文将详细解析这两种特性的使用方法。 首先,我们来看静态成员变量。静态成员变量是通过在变量声明前加上`...

    Java中的成员变量

    成员变量有两种主要类型:实例变量和静态变量。 1. 实例变量(对象变量) 实例变量是在类中声明的,没有static关键字。它们是每个对象独有的,也就是说,每创建一个新的类实例,都会为这些实例变量分配新的内存空间...

Global site tag (gtag.js) - Google Analytics