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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

什么是实例变量,什么是类变量?有什么区别呢?

25 个回复

倒序浏览
一个类的成员变量被static 修饰就是 类变量,随着类是加载而加载,否则就是实例变量,随着对象的创建存在。
回复 使用道具 举报 5 0
他们都定义在类中但在任何方法之外。类变量又叫静态变量,被static修饰。
  在生成每个类的实例对象时,Java运行时系统为每个对象的实例变量分配一块内存,然后可以通过该对象来访问这些实例的变量。不同对象的实例变量是不同的。而对于类变量来说,在生成类的第一个实例对象时,Java运行时系统对这个对象的每个类变量分配一块内存,以后再生成该类的实例对象时,这些实例对象将共享同一个类变量,每个实例对象对类变量的改变都会直接影响到其他实例对象。类变量可以通过类名直接访问,也可以通过实例对象来访问,两种方法的结果是相同的。
回复 使用道具 举报
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. }
复制代码



评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1

查看全部评分

回复 使用道具 举报 2 0
skill20 发表于 2014-5-24 18:56
一个类的成员变量被static 修饰就是 类变量,随着类是加载而加载,否则就是实例变量,随着对象的创建存在。 ...

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

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

回复 使用道具 举报
说下我的理解啊。。。实例就是类的对象,实例变量就是类的变量啦,也就是代表具体的类的某一个属性的变量;类的变量就是整个类的所有的对象都可以使用的公共的属性变量。
回复 使用道具 举报
这个我一般从生命周期来分:
1.随着类的加载而产生,随着类的终结而结束的为 类变量 ,属于整个类的所有实例化对象共同拥有
2.随着对象的实例化而产生,随着对象的终结而结束为  实例变量   属于具体的事例单独拥有
回复 使用道具 举报
zdh 中级黑马 2015-5-2 17:26:20
15#
哎哟,不错哦!!
回复 使用道具 举报
实例变量:就是成员变量,是对象的特有属性,他随着对象的建立而存在,随着对象的消失而消失。
类变量:就是被static 修饰的成员变量,一般成员属性值相同时定义为类变量,随着类的加载而加载,随着类的消失而消失。
回复 使用道具 举报 1 0
一个类的成员变量被static 修饰就是 类变量,随着类是加载而加载,可以类名加成员变量名直接调用,否则就是实例变量,随着对象的创建存在。
回复 使用道具 举报
never615 发表于 2014-5-24 20:41
他们都定义在类中但在任何方法之外。类变量又叫静态变量,被static修饰。
  在生成每个类的实例对象时,Jav ...

类变量一般推荐通过类名直接访问
回复 使用道具 举报
never615 发表于 2014-5-24 20:41
他们都定义在类中但在任何方法之外。类变量又叫静态变量,被static修饰。
  在生成每个类的实例对象时,Jav ...

请问基本类型,形参的改变对不会影响实际参数.
      引用类型,形参的改变,直接影响实际参数.
      和上述描述是一个意思吗
回复 使用道具 举报
好东西啊啊啊啊啊啊
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马