cc m=new cc();这句执行,就会调用构造方法cc();就是nn=n++;
你的n是个静态类变量,初值是20,n有后置加,应该是先赋值后加,那么nn=20,n自加1为21然后nn赋值给m 所以m=20;
然后执行 cc m1=new cc();
同理也是先赋值后加,而此时的n=21了,所以执行后n=22,nn=21,
然后nn赋值给m1,所以m1=21
cc m=new cc(); --> cc(){ nn=n++;} //先赋值后自加1 --> nn=n=20 --> m.nn=20 --> n=21
cc m1=new cc(); --> n=21 --> cc(){ nn=n++;} //先赋值后自加1 --> nn=n=21 --> m.nn=21 --> n=22
cc m2=new cc(); --> n=22 --> cc(){ nn=n++;} //先赋值后自加1 --> nn=n=22 --> m.nn=22 --> n=23
如果继续创建对象,静态变量会一直以这个规律赋值,即对象中的n的值都是上个变量创建时计算的结果,如果想在创建本对象时加1,把构造函数cc()中的表达式改成 nn=++n; 即可~
n++这个语句是先运算在进行自加所以实例化的m的时候先进行赋值再自加所以m=20;
实例化m1的时候因为在上一语句中n自加了1所以给m1赋值的是21
如果你把
cc()
{
nn=n++;
}
这个构造方法nn=n++改为nn=++n那么结果就是m=21,m1=22了。
cc m=new cc();//第一次new 时nn=20,n=21所以m=20
cc m1=new cc();//第二次new时nn=21,n=22所以m1=21
第一次创建CC,调用构造函数,m=n=20,m1创建,是第二次调用,n++,m1=n+1=21