main.javapublic class Main
{
    /**
     * @param args the command line arguments
     */
    public static void main( String[] args )
    {
        // TODO code application logic here
        Counter.Increase.toIncrease();
        new Counter();
        new Counter();
        Counter.Increase.toIncrease();
    }//}//counter.java
public class Counter
{
    private static int c_iCount = 0;    private int m_id = c_iCount++;    public int getCount()
    {
        return c_iCount;
    }//    public int getID()
    {
        return m_id;
    }//    @Override
    public String toString()
    {
        return "m_id = " + getID() + " c_iCount = " + getCount();
    }//    public static Counter Increase = new Counter()
    {
        @Override
        public void toIncrease()
        {
            System.out.println( "toIncrease action!" );
            c_iCount++;
            System.out.println( toString() );
        }//    };//    public Counter()
    {
        System.out.println( toString() );
    }//    public void toIncrease()
    {
        System.out.println( "toIncrease doesnt action!" );
    }//
} //

解决方案 »

  1.   

    第三行打印出来的结果是由
    第一句的:Counter.Increase.toIncrease();打印出来的。此时并没有改变其ID值,任为0。第五行是由第四句Counter.Increase.toIncrease();打印出来的。注意:Increase是一个static变量,在第二次引用时不会去new Counter对象,只时任然使用第一句创建的的Counter对象来使用~~~而在整个程序中,除了初始化时对ID进行更改值以外,其它的地方没有更改任何值~~~~