为什么这两种输出会不同
下面两个程序我觉得是相似的,输出却是大不同,为什么?
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++;
}
}
public class TeatAll {
/**
* 这里的staticNum是static修饰的,是“类”变量。 类变量,也就是被所有的类的实例共享的。
* 如果以实例改变了这个“类变量”,其他的所有实例的该数值都会变化。
*/
private static int staticNum;
/**
* 这里的 num 是没有 static 修饰的,它是类的成员变量。 成员变量,是每个类的实例所独享的。 这个是独享的,不会受到其他实例的影响。
*/
private int num;
public void showStaticNum() {
staticNum++;
System.out.println("static num : " + staticNum
+ " , 哈哈,我是“类变量”,我是所有类的实例所共享的。你们其中一个类实例改变了我,所有的实例都可以看见我的变化。");
}
public void showNum() {
num++;
System.out.println("num : " + num + " , 因为我是“成员变量”,所有我不会被其他的实例修改。");
}
/**
* @param args
*/
public static void main(String[] args) {
TeatAll a = new TeatAll();
a.showStaticNum();
a.showNum();
TeatAll b = new TeatAll();
b.showStaticNum();
b.showNum();
TeatAll c = new TeatAll();
c.showStaticNum();
c.showNum();
}
}