黑马程序员技术交流社区

标题: 我猜中了结果,却不明白过程... [打印本页]

作者: 余银桂    时间: 2012-6-17 18:26
标题: 我猜中了结果,却不明白过程...
本帖最后由 余银桂 于 2012-6-17 18:50 编辑
  1. public class Test{

  2.         private static int x=100;  //private 和 static 同时作用在变量上,那这个变量该怎么理解?
  3.         
  4.         public static void main(String[] args){
  5.                
  6.                 Test t1 = new Test();
  7.                 t1.x++;   
  8.                 System.out.println( x ); //这里是 101
  9.                 Test t2 = new Test();
  10.                 t2.x++;
  11.                 System.out.println( x ); //这里是102
  12.                 t1 = new Test();
  13.                 t1.x++;
  14.                 System.out.println( x ); //这里是103
  15.                 Test.x--;
  16.                 System.out.println( "x="+x ); //输出结果是x=102; 上面所有new的和没new的都一直在作用同一个x,为什么?
  17.                
  18.         }

  19. }
复制代码

作者: 淡然    时间: 2012-6-17 18:31
本帖最后由 淡然 于 2012-6-17 18:47 编辑


作者: 张_涛    时间: 2012-6-17 18:36
private修饰就是表示该属性x只能在该类中被访问
static修饰表示该属性x是类变量(静态变量)。
当Test类初始化完成之后,类变量也就随之初始化完成,以后不管程序创建多少个Test对象,系统不再为x类变量分配内存。而且,不管通过哪个Test对象来访问x类变量,底层都将转换为通过Test来访问x类变量。
到这里,应该明白了吧,你一直操作的是一个变量。

尽量不要使用类变量,原因有下:
1. 实例变量是生存周期与对象一样,而类变量则与类一样,比较耗费资源
2. 每次访问类变量的时候,都得转换为通过Test类去访问,性能不是很好。

作者: 车风波    时间: 2012-6-17 18:37
static 修饰的变量在内存中只有一个,所以无论你怎么new 都是操作一个x,一般用类名.变量名调用静态变量。
作者: 余银桂    时间: 2012-6-17 18:47
车风波 发表于 2012-6-17 18:37
static 修饰的变量在内存中只有一个,所以无论你怎么new 都是操作一个x,一般用类名.变量名调用静态变量。 ...

哦,原来是这么回事,最近被new弄得有点混乱了...一下把这题也弄晕了
作者: 余银桂    时间: 2012-6-17 18:51
淡然 发表于 2012-6-17 18:31
  • public class Test{
  •         private static int x=100;  //private 和 static 同时作用在变量 ...

  • 很详细,谢谢了,仔细想想,还是很简单的,这是我被那new给骗了...




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