黑马程序员技术交流社区

标题: 关于静态变量和实例变量的区别的问题 [打印本页]

作者: huima    时间: 2013-4-14 17:48
标题: 关于静态变量和实例变量的区别的问题
本帖最后由 huima 于 2013-4-15 08:39 编辑

静态变量和实例变量的区别是什么,求解答???
作者: ①人←①城市    时间: 2013-4-14 17:50
java类的成员变量有俩种:
一种是被static关键字修饰的变量,叫类变量或者静态变量
另一种没有static修饰,为实例变量

类的静态变量在内存中只有一个,java虚拟机在加载类的过程中为静态变量分配内存,静态变量位于方法区,被类的所有实例共享。静态变量可以直接通过类名进行访问,其生命周期取决于类的生命周期。

而实例变量取决于类的实例。每创建一个实例,java虚拟机就会为实例变量分配一次内存,实例变量位于堆区中,其生命周期取决于实例的生命周期
作者: 何旭程    时间: 2013-4-14 17:53
你说的实例变量是类的成员变量吧?成员变量与静态变量的区别如下:

1、两个变量的生命周期不同

成员变量随着对象的创建而存在,随着对象的被回收而释放

静态变量随着类的加载而存在,随着类的消失而消失

2、调用方式不同

成员变量只能被对象调用

静态变量可以被对象调用,还可以被类名调用

3、别名不同

成员变量也称为实例变量

静态变量称为类变量

4、数据存储位置不同

成员变量数据存储在堆内存的对象中,所以也叫对象的特有数据

静态变量数据存储在方法区(共享数据区)的静态区,所以也叫对象的共享数据


作者: 孙鑫    时间: 2013-4-14 17:55
静态变量属于类,不用实例化就已经存在,所有的实例共享同一个静态变量,可以通过类名和实例名来访问。
实例变量属于实例,每个实例都有自己的这个变量,只能通过实例名来访问。

作者: 沈浩    时间: 2013-4-14 17:56
基本就两点吧
1, 静态变量随着类的加载而存在于方法区中,实例变量随着对象的建立而存在于堆内存中。
2,静态变量的生命周期最长随着类的消失而消失,实例变量的生命周期随着对象的消失而消失。
作者: U芽Lady    时间: 2013-4-14 18:00

        存在位置
                静态变量随着类的加载而存在于方法区中
                实例变量随着对象的建立而存在于堆内存中
        生命周期
                静态变量的生命周期长,随着类的消失而消失
                实例变量生命周期随着对象的消失而消失
        所属不同
                静态变量也称之为类变量,属于整个类,被整个类共享
                实例变量是对象的特有数据,所属于对象




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2