黑马程序员技术交流社区

标题: 类变量和实例变量是什么 [打印本页]

作者: 北极£莜蓝    时间: 2014-6-4 23:55
标题: 类变量和实例变量是什么
它们区别是什么
作者: 热血青年    时间: 2014-6-5 00:04
类变量也叫静态变量,也就是在变量前加了static 的变量; 实例变量也叫对象变量,即没加static 的变量;类变量和实例变量的区别在于:类变量是所有对象共有,其中一个对象将它值改变,其他对象得到的就是改变后的结果;而实例变量则属对象私有,某一个对象将其值改变,不影响其他对象
作者: 北极£莜蓝    时间: 2014-6-5 11:19
热血青年 发表于 2014-6-5 00:04
类变量也叫静态变量,也就是在变量前加了static 的变量; 实例变量也叫对象变量,即没加static 的变量;类 ...

实例变量可以理解为非静态的成员变量吗
作者: 西门吹风    时间: 2014-6-5 11:38
本帖最后由 西门吹风 于 2014-6-5 11:54 编辑

与实例变量的区别:   
     1)静态变量随类的加载而初始化,实例变量在实例被创建时才而初始化到堆区中。   
     2)不管是否创建实例,静态变量都可以直接用“类名.静态变量”调用,实例变量只能在创建对象后才能调用。   
     3)静态变量可以被静态方法和非静态方法调用,实例变量不能被静态方法调用。
类加载时静态变量和静态方法就初始化存放方法区中,此时还没有实例被创建,但已经可以调用静态变量了,而实例变量只有对象被创建后才会被初始化到堆区中,也就是说有实例之后才会有实例变量,那么静态方法自然就不能调用实例变量。如下代码:

  1. class StaticDemo
  2. {  
  3.      public static void main(String[] args)   
  4.      {   
  5.         System.out.println(Person.hands);    //这里并没有任何实例,可以直接调用静态量变
  6.         //System.out.println(Person.name);  //不能直接调用实例变量,实例变量还没有初始化   
  7.         Person a=new Person();                  //要使用实例变量必须先实例化一个对象   
  8.         System.out.println(a.name);     //有实例后才能调用实例对象  
  9.     }
  10. }
  11. class Person
  12. {  
  13.     static int hands=2;          //静态变量  
  14.     String name="sky";           //实例变量
  15. }
复制代码


作者: 北极£莜蓝    时间: 2014-6-5 11:59
西门吹风 发表于 2014-6-5 11:38
与实例变量的区别:   
     1)静态变量随类的加载而初始化,实例变量在实例被创建时才而初始化到堆区中。 ...

具体的什么时候需要把变量定义为静态变量?  我们老师PPT总结的是:当该成员变量所存储的数据,每一个变量都拥有这个数据,就没有必要存储到对象中,只要让所有的对象共享该数据即可,这时应该用static修饰.感觉有点别扭,
作者: 西门吹风    时间: 2014-6-5 12:34
北极£莜蓝 发表于 2014-6-5 11:59
具体的什么时候需要把变量定义为静态变量?  我们老师PPT总结的是:当该成员变量所存储的数据,每一个变量都 ...

如有一个人类,在人类中有一个手的变量,这个变量存的数据为2,从我们的常识可以知道每个人都是两只手(特殊情况除外),那么手这个变量就可以定义为静态的,因为所有人类实例的手变量的数据都是2,就没有必要每个实例都创建一个手变量,可以共用一个静态的手变量。
个人理解,不知道说得是否清楚
作者: 北极£莜蓝    时间: 2014-6-5 18:02
西门吹风 发表于 2014-6-5 12:34
如有一个人类,在人类中有一个手的变量,这个变量存的数据为2,从我们的常识可以知道每个人都是两只手( ...

谢谢,可不可以这么总结: :当该类某个成员变量所存储的数据,被该类中每一个对象都拥有而且数据值固定,就没有必要一 一存储到对象中,只要让所有的对象共享该数据即可,这时应该用static修饰.
作者: 嗅ㄨiaǒ孑    时间: 2014-6-5 18:13
实例变量的使用必须在创建对象后,而静态变量不需要特别创建,类本身就可以操作




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