程序源代码如下:
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);
 }
 }
运行结果如下: m1=21
             m=20我不明白为什么两个对象得出的结果会不同,还有不知道为什么每次用eclipse运行程序成功后再最小化最大化applet小程序的窗口时,结果m1和m的值都会+1
哪位高手进来讲解一下

解决方案 »

  1.   

    问题在于你的这句static int n; 去掉这个static和静态语句块,
    然后把n在构造函数中初始化,应该就没问题了。
      

  2.   

    static int n;对变量加上static,就是所谓的类域,也就是初始化一次,该类的多个实例共同拥有。cc m=new cc(); n = 20, nn = 20; n++ = 21
    cc m1=new cc(); n = 21, nn = 21。明白了就结贴
      

  3.   

    static静态块在类new出一个实例前先运行,然后再调用构造器,但只执行一次(只在第一次new出实例时).
    import java.awt.*; 
    import java.applet.*; 
    class cc 
    {static int n; 
    int nn; 
    static //1、首先在此执行,此时n=20;(new出m实例时)
    {n=20;} 
    cc() //2、然后执行这,此时nn=20,n=21;(new出m实例时)//3、最后执行这,此时nn=21,n=22;(new出m1实例时)
    {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); 

    } 建议学习一下静态代码块与构造器的用法哟!
      

  4.   

    还有不知道为什么每次用eclipse运行程序成功后再最小化最大化applet小程序的窗口时,结果m1和m的值都会+1 原因:最小化最大化applet小程序的窗口时,这里相当于刷新呀.那里的变量值当然是变化的呀.