下面两个程序我觉得是相似的,输出却是大不同,为什么?
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++;
}