public class Test{
       public static int a;
       private Test(){
       a=30;
      }
    public static void main(String[] args){
      Test t1=new Test();
      
      t1.a=10;
   
      Test t2=new Test();
      System.out.println(t1.a);
      System.out.println(t2.a);
      System.out.println(Test.a);
           }
      }
这个输出的结果为为什么是3个30而没有用到t1.a=10;

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【Mengmengenator】截止到2008-06-26 18:22:24的历史汇总数据(不包括此帖):
    发帖数:1                  发帖分:10                 
    结贴数:0                  结贴分:0                  
    未结数:1                  未结分:10                 
    结贴率:0.00  %            结分率:0.00  %            
    如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html
      

  2.   

    static属性的共享的,
    在Test t2=new Test(); 的时候,调用构造方法把 a 赋值为30
    所以打印3个30
      

  3.   

      Test t1=new Test(); 
          
          t1.a=10; 
      
          Test t2=new Test(); t2的时候,又运行了 a= 30;
    类变量,所有实例就一个值
      

  4.   

    你调用  Test t2=new Test(); 的时候又把a设为30了撒
      

  5.   

    static类型的变量在内存中只有1个地方,你要是把顺序换一下:
          t1.a=10; 
         System.out.println(t1.a); 
          Test t2=new Test(); 
          
          System.out.println(t2.a); 
          System.out.println(Test.a); 
    就会见到1个10和2个30.哪两个30是构造函数Test t2=new Test(); 给的。
    欢迎访问:www.xinshuguang.org有Java视频,还不全,正在创建....
      

  6.   

    静态(static)变量与静态方法类似。所有此类实例共享此静态变量,也就是说在类装载时,只分配一块存储空间,所有此类的对象都可以操控此块存储空间也就是说t2和t1共用一个a你用Test t2=new Test();就把a改成了30
      

  7.   

    Test t1=new Test();//创建了一个新对象用到了构造函数此时a=30
         
          t1.a=10;//此时a=10
     
          Test t2=new Test();//创建了一个新对象,用到了构造函数此时a=30,也就是这是最后一次对a赋值,最后a=30,
                             //所以出现了你说的结果      System.out.println(t1.a);
          System.out.println(t2.a);
          System.out.println(Test.a); 
      

  8.   

    public class Test{ 
          public static int a; 
          private Test(){ 
          a=30; 
          } 
        public static void main(String[] args){ 
          Test t1=new Test(); 
          
          t1.a=10;          此时a为10
      
          Test t2=new Test();     调用了test()构造函数,所以下面都是30
          System.out.println(t1.a); 
          System.out.println(t2.a); 
          System.out.println(Test.a); 
              } 
          } 
      

  9.   

    楼上已经解释得很清楚了~~~因为a是一个静态变量,在内存中共用这一个,当产生t1对象的时候,因为构造函数,a变成了30 ,随后又有一个t1.a=10;这个时候a的值又变成了10  如果此时有一个System.out.println(Test.a);就可以看到它变成了10的,但是马上又执行了产生t2对象,又由于构造函数,马上变成了30   这个时候执行你的打印语句,肯定就是30啦。因为在内存中只有一份,所以就全都是一样的啦~