日期:2014-05-20  浏览次数:20778 次

为什么这两种输出会不同
下面两个程序我觉得是相似的,输出却是大不同,为什么?

import java.util.*;

public class Test
{
public static void main(String[] args)
{
A[] employee = new A[3];
employee[0] = new A();
employee[1] = new A();
employee[2] = new A();

for(A e: employee)
{
System.out.println(e.a);
}
}
}

class A
{
public static int a = 0;
public A()
{
a++;
}
}


得到的结果是


但是下面的写法
import java.util.*;

public class Test
{
public static void main(String[] args)
{
A m = new A();
System.out.println(m.a);

A n = new A();
System.out.println(n.a);

A x = new A();
System.out.println(x.a);

}
}

class A
{
public static int a = 0;
public A()
{
a++;
}
}

得到这样的结果



我本来是希望第一个程序能够得到第二种的结果的,但是不是,为什么?

------解决方案--------------------
程序1是new了3个对象后,再输出a的值,在输出之前a++;已经被调用了3次了。
程序2是new一个对象,输出一次,也就是每调用一次a++;然后输出一次a的值。

这个很好理解啊。
------解决方案--------------------
一个是立刻打印 一个是全部完成后打印。  
------解决方案--------------------

import java.util.*;
 
public class Test
{
    public static void main(String[] args)
    {        
            A[] employee = new A[3];
            employee[0] = new A();//这里 a++ 的数值是 1
            employee[1] = new A();//这里 a++ 的数值是 2
            employee[2] = new A();//这里 a++ 的数值是 3
             //最终你的 a 的数值是 3,所以下面你会打印3遍 3 
            for(A e: employee)
            {
                System.out.println(e.a);    
            }    
    }    
}
 
class A
{
        public static int a = 0;//注意:你这里的变量是 static,也就是说这个变量是“类”变量。
        public A()
        {
                a++;
        }    
}




import java.util.*;
 
public class Test
{
    public static void main(String[] args)
    {        
            A m = new A();//这里 a++ 的数值是 1
            System.out.println(m.a); //打印 1
             
            A n = new A();//这里 a++ 的数值是 2
            System.out.println(n.a);//打印 2
             
            A x = new A();//这里 a++ 的数值是 3
            System.out.println(x.a);//打印 3
 
    }    
}
 
class A
{
        public static int a = 0;
        public A()
        {
                a++;
        }