A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郭炜 中级黑马   /  2012-3-13 02:43  /  3405 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

静态变量和实例变量的区别?

11 个回复

倒序浏览
实例变量和类(静态)变量区别
        存放位置
类变量随着类的加载而存在于方法区中。
                实例变量随着对象的建立二存在于堆内存中。
        生命周期
                类变量生命周期最长,随着类的消失而消失。
                实例变量生命周期随着对象的消失而消失。
回复 使用道具 举报
实例变量和类变量的区别:

1存放的位置:类变量随着类的加载而存在于方法区中,实例变量随着对象的建立而存放最在堆内存中
2生命周期:类变量生命周期最长,随着类的消失而消失。实例变量随着对象的消失而消失。
静态方法只能访问静态成员(方法和变量),非静态方法可以访问静态也可以访问非静态。静态方法中不可以写this,supper关键字,主函数是静态的
回复 使用道具 举报
静态变量属于类,该类不生产对象,通过类名就可以调用静态变量。
实例变量属于该类的对象,必须产生该类对象,才能调用实例变量。
回复 使用道具 举报
静态变量 存在 方法区里
实例变量存在堆里

静态变量随着类加载的  周期最长,值到类消失

实例变量是随着对象加载的

静态方法体里面孩子能是静态 访问方式 类.

回复 使用道具 举报
实例变量和静态变量的区别:

java类的成员变量有两种:一种是被static关键字修饰的变量,叫类变量或者静态变量;另一种没有static修饰,为实例变量。

1.语法格式不同:

静态变量前面需要加上static

实例变量前面不加static

2.程序运行不同:

静态变量不属于某个实例对象,而是属于类,所以也叫类变量,只要程序加载了类的字节码,就比如我有一个Demo类,编译之后生成的class文件就是字节码文件,只要我在dos里面执行了java Demo,这个Demo类就被加载了,此时,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。

实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。

3.存在位置不同:

静态变量随着类的加载而存在于方法区中,被所有的对象共享.

实例变量随着对象的建立而存在于堆内存中,每创建一个实例,JVM就会为实例变量分配一次内存.

2.生命周期不同,

静态变量可以由类名直接访问,是随着类的加载而加载,类存在,静态变量就存在,否则静态变量就不存在.所以静态变量生命周期最长.

实例变量随着对象消失而消失,对象在,实例变量就在,否则就不在.

评分

参与人数 1技术分 +2 收起 理由
职业规划-刘倩老师 + 2 赞一个!

查看全部评分

回复 使用道具 举报
学习学习。
回复 使用道具 举报
张一凡 黑马帝 2012-3-13 14:45:16
8#
1,
成员变量只能被对象所调用。
静态成员变量除了可以被对象调用,还可以被类名调用。
2,
成员变量也称为对象变量,或者实例变量。
静态变量也称为类变量。
3,
成员变量随着对象的出现而出现,随着对象的被回收而消失。
静态变量随着类的加载而加载,随着类的消失而消失。
回复 使用道具 举报
蒋安国 黑马帝 2012-3-13 18:27:01
9#
叫法上的区别:静态变量也成为类变量,实例变量也成为成员变量。
存储区别:静态变量随着类的加载而存在于方法区中,被所有对象所共享。
实例变量是随着对象的建立而存在于堆内存中,如果new了好几个对象,那么这几个对象就在堆内存中开辟几个堆空间,相应的实例变量就被初始化几次。
应用区别:因为静态变量是随着类的加载就已经被加载进内存中,因为它是先加载的,所以它是优先于对象存在的,在调用的时候,可以用类名直接调用,当然如果建立了对象后,该对象也可以直接操作该静态变量。实例变量只能被对象所操作,各对象都有各自的成员变量。
在初始化方面:静态变量和成员变量一加载进内存中,它就有自己的默认初始化值。
生命周期不同:静态变量随着类的加载而加载,只要该类还在内存中就会一直存在,所以生命周期最长。实例变量是随着各对象的存在而存在,如果某个对象不再存在,那么相应的实例变量也就不再存在。
注意事项:我们要清楚为什么要建立对象,如果一个对象被建立后,没有自己的特有成员变量属性,那么就违背了建立对象的初衷,因为不用建立对象也照样能行,此时就将成员变量修饰成静态的,直接用类名操作。有些成员变量,例如姓名,年龄之类的变量,可以在一初始化时就存在,所以可以在构造函数中直接接受实参传过来的值的方式进行初始化,这样每new一个对象时,每个成员变量就会有自己的显示的初始化值。
回复 使用道具 举报
被static关键字修饰的变量为静态变量; 随着类的加载就会在内存中被分配空间, 不用创建对象, 用类名.可以直接调用, 被共享; 生命周期取决于类的生命周期;
实例变量要创建对象才在内存中被分配空间, 而且只有创建了对象才能使用这个变量; 生命周期取决于对象;
回复 使用道具 举报
静态变量位于方法区,被类的所有实例共享。静态变量可以直接通过类名进行访问,其生命周期取决于类的生命周期。而实例变量取决于类的实例。每创建一个实例,java虚拟机就会为实例变量分配一次内存,实例变量位于堆区中,其生命周期取决于实例的生命周期。



回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马