java问题,下面这个程序的输出结果为m1=21 m=20 请高人详细解释一下这个结果是如何得到的?

import java.awt.*;
import java.applet.*;
class cc
{
static int n;
int nn;
static
{
n=20;
}
cc()
{
nn=n++;
}
}
public class C4_8 extends Applet{
public void paint(Graphics g)
{
cc m=new cc();
cc m1=new cc();
g.drawString("m1="+m1.nn,20,50);
g.drawString("m="+m.nn,20,90);
}

}

第1个回答  2011-12-31
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
第2个回答  2011-12-31
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; 即可~本回答被提问者采纳
第3个回答  2012-01-01
n++这个语句是先运算在进行自加所以实例化的m的时候先进行赋值再自加所以m=20;
实例化m1的时候因为在上一语句中n自加了1所以给m1赋值的是21
如果你把
cc()
{
nn=n++;
}
这个构造方法nn=n++改为nn=++n那么结果就是m=21,m1=22了。
第4个回答  2011-12-31
cc m=new cc();//第一次new 时nn=20,n=21所以m=20
cc m1=new cc();//第二次new时nn=21,n=22所以m1=21
第5个回答  2011-12-31
第一次创建CC,调用构造函数,m=n=20,m1创建,是第二次调用,n++,m1=n+1=21
相似回答