首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

为啥这两种输出会不同

2013-11-19 
为什么这两种输出会不同下面两个程序我觉得是相似的,输出却是大不同,为什么?但是下面的写法我本来是希望第

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



但是下面的写法


我本来是希望第一个程序能够得到第二种的结果的,但是不是,为什么?
[解决办法]
程序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个对象 都是引用了最后一次赋值后的 变量

热点排行