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

解决方案 »

  1.   


    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++;
            }    
    }
      

  2.   

    但是相似的程序我用包来就又有点不明白了。package com.corejava;
    import java.util.*;
    public class Test2
    {
     public int id;
     public static int count = 0;
    public Test2()
    {
    count++;
    id = count;
    }
    }import com.corejava.*;
    import java.util.*;public class Test
    {
    public static void main(String[] args)
    {
    Test2[] student = new Test2[3];
    student[0] = new Test2();
    student[1] = new Test2();
    student[2] = new Test2();

    for(Test2 e: student)
    {
    System.out.println("id = " + e.id);
    }
    }
    }
    同样是先调用三次包,但是结果id却是1, 2, 3
      

  3.   

    当然,如果包中没有id只有count的话
    package com.corejava;
    import java.util.*;
    public class Test2
    {
     
     public static int count = 0;
    public Test2()
    {
    count++;

    }
    }主程序中改成输出count就真的会是3个3。
    import com.corejava.*;
    import java.util.*;public class Test
    {
    public static void main(String[] args)
    {
    Test2[] student = new Test2[3];
    student[0] = new Test2();
    student[1] = new Test2();
    student[2] = new Test2();

    for(Test2 e: student)
    {
    System.out.println("count = " + e.count);
    }
    }
    }
    这样的结果是
      

  4.   


    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(); }}
      

  5.   

    static 注意这个词了么这个不管创建了多少对象 对象引用的都是同一个地方第一个例子中创建的3个对象 都是引用了最后一次赋值后的 变量
      

  6.   

    如果我上面的你在看不懂。那只能说明我的语言表达能力很差。
    你还是看《Java编程思想(第四版)》吧。里面关于static修饰的静态变量的描述,很详细。我比不了。
      

  7.   

    谢谢大家,我好好体会下。感谢“develop_design_level”替我着急,我真是进步特别慢。