为什么这两种输出会不同
下面两个程序我觉得是相似的,输出却是大不同,为什么?
但是下面的写法
我本来是希望第一个程序能够得到第二种的结果的,但是不是,为什么?
[解决办法]
程序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++;
}
}
[解决办法]
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();
}
}
[解决办法]
static 注意这个词了么
这个不管创建了多少对象 对象引用的都是同一个地方
第一个例子中创建的3个对象 都是引用了最后一次赋值后的 变量