黑马程序员技术交流社区

标题: 什么是实例变量,什么是类变量?有什么区别呢? [打印本页]

作者: zhrnghgwsws    时间: 2014-5-24 18:15
标题: 什么是实例变量,什么是类变量?有什么区别呢?
什么是实例变量,什么是类变量?有什么区别呢?
作者: skill20    时间: 2014-5-24 18:56
一个类的成员变量被static 修饰就是 类变量,随着类是加载而加载,否则就是实例变量,随着对象的创建存在。
作者: never615    时间: 2014-5-24 20:41
他们都定义在类中但在任何方法之外。类变量又叫静态变量,被static修饰。
  在生成每个类的实例对象时,Java运行时系统为每个对象的实例变量分配一块内存,然后可以通过该对象来访问这些实例的变量。不同对象的实例变量是不同的。而对于类变量来说,在生成类的第一个实例对象时,Java运行时系统对这个对象的每个类变量分配一块内存,以后再生成该类的实例对象时,这些实例对象将共享同一个类变量,每个实例对象对类变量的改变都会直接影响到其他实例对象。类变量可以通过类名直接访问,也可以通过实例对象来访问,两种方法的结果是相同的。
作者: 陌路迟行    时间: 2014-5-24 20:52
1.类变量也叫静态变量,也就是在变量前加了static 的变量,类变量在创建对象前就已经在内存中存在,随类的创建而创建;
实例变量也叫对象变量,即没加static 的变量。2.类变量是所有对象共有,其中一个对象将它值改变,其他对象得到的就是改变后的结果;
而实例变量则属对象私有,某一个对象将其值改变,不影响其他对象。
3.所有的实例对象都共用一个类变量,内存中只有一处空间是放这个类变量值的。因此,如果一个对象把类变量值改了,另外一个对象再取类变量值就是改过之后的了。
在创建实例对象的时候,内存中会为每一个实例对象的每一个非静态成员变量开辟一段内存空间,用来存储这个对象所有的非静态成员变量值,即使两个不同的实例对象是属于同一个class类,但是它们的同名非静态成员变量在内存中占用的空间是不同的。
例子:
  1. public class A{
  2.    static  int a = 0; //类变量
  3.    private int b = 0; //实例变量
  4. }

  5. public class B{
  6.    public void main (String[] args){
  7.        A a1 = new A();
  8.        A a2 = new A();
  9.        a1.a = 3;  // 等同于 A.a = 3;
  10.        a1.b = 4 ;
  11.        System.out.println(a2.a); //结果为3
  12.        //类变量是针对所有对象的,所以a1改变a,a2的a也改变
  13.        System.out.println(a2.b); //结果为0
  14.        //实例只改变自身的,所以a1对象的b改变,不影响对象a2的b变量
  15.    }
  16. }
复制代码




作者: 钟翠翠    时间: 2014-6-27 17:17
skill20 发表于 2014-5-24 18:56
一个类的成员变量被static 修饰就是 类变量,随着类是加载而加载,否则就是实例变量,随着对象的创建存在。 ...

受教了。。。
作者: GYSWL    时间: 2014-8-8 07:40
类变量在创建对象前就已经在内存中存在,随类的创建而创建;就算动物生来就有嘴,都会叫(至于叫什么就是实例变量了)
实例变量也叫对象变量就算猫会喵喵叫,狗会旺旺叫
作者: xiaoxiaofeng    时间: 2014-8-13 11:48
类变量也叫静态变量,也就是在变量前加了static 的变量;
实例变量也叫对象变量,即没加static 的变量;区别在于:类变量和实例变量的区别在于:类变量是所有对象共有,其中一个对象将它值改变,其他对象得到的就是改变后的结果;而实例变量则属对象私有,某一个对象将其值改变,不影响其他对象;
作者: Hosing    时间: 2014-11-20 18:34
说的太好了,我们刚考过这个题,现在明白了。原来实例变量是不能被static修饰的
作者: DxxD    时间: 2015-3-9 09:55
以前还真没想想过这个问题。。。谢谢了
作者: 黑马小夏    时间: 2015-3-12 00:20
已经学习,感学楼主
作者: 麻仁博    时间: 2015-3-22 13:48
本帖最后由 麻仁博 于 2015-3-22 13:53 编辑

体会: 类变量 是用static +变量,所以也叫 静态变量!  实例变量 又称为对象变量 即不加static !           类变量是公有的。所以值一旦更改,其他对象去取这个类变量的值,得到的就是更改之后的。
           而实例变量,是私有的,只存在于创建自己的那个对象中去。不同对象中的实例变量是不一样的。所以更改其中一个实例变量不影响其他变量

作者: 胡谭龙    时间: 2015-4-7 22:47
解释的很到位


作者: E.Young    时间: 2015-4-7 23:10
说下我的理解啊。。。实例就是类的对象,实例变量就是类的变量啦,也就是代表具体的类的某一个属性的变量;类的变量就是整个类的所有的对象都可以使用的公共的属性变量。
作者: 安日成    时间: 2015-4-29 00:38
这个我一般从生命周期来分:
1.随着类的加载而产生,随着类的终结而结束的为 类变量 ,属于整个类的所有实例化对象共同拥有
2.随着对象的实例化而产生,随着对象的终结而结束为  实例变量   属于具体的事例单独拥有
作者: zdh    时间: 2015-5-2 17:26
哎哟,不错哦!!
作者: 严晗哲    时间: 2015-5-14 23:07
实例变量:就是成员变量,是对象的特有属性,他随着对象的建立而存在,随着对象的消失而消失。
类变量:就是被static 修饰的成员变量,一般成员属性值相同时定义为类变量,随着类的加载而加载,随着类的消失而消失。
作者: 王小战    时间: 2015-7-16 14:51
一个类的成员变量被static 修饰就是 类变量,随着类是加载而加载,可以类名加成员变量名直接调用,否则就是实例变量,随着对象的创建存在。
作者: 放飞邹莺    时间: 2015-8-2 20:51
never615 发表于 2014-5-24 20:41
他们都定义在类中但在任何方法之外。类变量又叫静态变量,被static修饰。
  在生成每个类的实例对象时,Jav ...

类变量一般推荐通过类名直接访问
作者: 放飞邹莺    时间: 2015-8-2 21:08
never615 发表于 2014-5-24 20:41
他们都定义在类中但在任何方法之外。类变量又叫静态变量,被static修饰。
  在生成每个类的实例对象时,Jav ...

请问基本类型,形参的改变对不会影响实际参数.
      引用类型,形参的改变,直接影响实际参数.
      和上述描述是一个意思吗
作者: 眉宇吹过的夏天    时间: 2015-11-17 20:58
好东西啊啊啊啊啊啊
作者: 阿昆    时间: 2016-1-24 19:54
类变量: 比较特殊的实例变量,用static修饰的,一个类共用这个变量,所有由这类生成的对象都共用这个变量,类装载时就分配存储空间。一个对象修改了变量,则所以对象中这个变量的值都会发生改变。  实例变量: 从属于类,由类生成对象时,才分配存储空间,各对象间的实例变量互不干扰,能通过对象的引用来访问实例变量。
作者: 小鬼丫丫    时间: 2016-2-18 18:05
陌路迟行 发表于 2014-5-24 20:52
1.类变量也叫静态变量,也就是在变量前加了static 的变量,类变量在创建对象前就已经在内存中存在,随类的 ...

刚学起来感觉好难理解
作者: 老人与海    时间: 2016-4-16 13:26
实例变量也叫对象变量,随着对象的创建而存在,随着对象的消失而消失!类变量随着类的存在而存在的
作者: BKB-Ren    时间: 2016-5-5 20:05
解释的都不错 受教了
作者: innovator    时间: 2016-5-17 13:53
陌路迟行 发表于 2014-5-24 20:52
1.类变量也叫静态变量,也就是在变量前加了static 的变量,类变量在创建对象前就已经在内存中存在,随类的 ...

又回顾整理了思路,学到了,赞,很赞,超级赞...
作者: wz529377283    时间: 2016-7-10 23:44
static修饰的变量存在于方法区,还是堆得静态区




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