一个java源文件javac出多个class文件出来!是怎么回事?代码如下:
import java.awt.*;
import java.awt.event.*;
class yuan extends Panel implements ActionListener
{
  double r=0,area;
  TextField banjin,result_text;
  Button b=null;
  yuan()
  {
    banjin=new TextField(10);
    result_text=new TextField(10);
    b=new Button("确定");
    add(new Label("请输入半径"));
    add(banjin);add(result_text);
    add(b);
    b.addActionListener(this);
  }
  public void actionPerformed(ActionEvent e)
  {try
    {
       r=Double.parseDouble(banjin.getText());
       area=Math.PI*r*r;
       result_text.setText(""+area);
    }
    catch(Exception ee)
    {
      banjin.setText("请输入数字字符");
    }
  }
  
  
  class sanjiaoxing extends Panel implements ActionListener //负责计算三角形的面积
  {
    double a=0,b=0,c=0;
    TextField bian1=new TextField(6);
    TextField bian2=new TextField(6);
    TextField bian3=new TextField(6);
    TextField result_text_s =new TextField(12);
    Button button=new Button("确定");
   sanjiaoxing()
   {
     add(new Label("请输入三边的长度"));
     add(bian1);add(bian2);add(bian3);
     add(button);button.addActionListener(this);
     add(new Label("三角形的面积是:"));
     add(result_text_s);
   } 
   public void actionPerformed(ActionEvent e)
   {
     try
      {
        a=Double.parseDouble(bian1.getText());
        b=Double.parseDouble(bian2.getText());
        c=Double.parseDouble(bian3.getText());
        if(a+b>c&&a+c>b&&b+c>a)
        {
          double p=(a+b+c)/2;
          area=Math.sqrt(p*(p-a)*(p-b)*(p-c));
          result_text_s.setText(""+area);
        }
        else
        {
          result_text_s.setText("你输科的三边不能形成三角形");
        }
      }
      catch(Exception ee)
      {
        result_text_s.setText("请输入数字字符");
      }
   }
  }
 
 
 class Win extends Frame implements ActionListener
 {
   MenuBar bar=null;
   Menu menu=null;
   MenuItem item1,item2;
   yuan circle;
   sanjiaoxing trangle;
   Win()
   {
     bar=new MenuBar();
     menu=new Menu("选择");
     item1=new MenuItem("圆计算面积");
     item2=new MenuItem("三角形计算面积");
     menu.add(item1);menu.add(item2);
     bar.add(menu);
     circle=new yuan();
     trangle=new sanjiaoxing();
     item1.addActionListener(this);
     item2.addActionListener(this);
     setVisible(true);setBounds(100,120,100,90);
   }
   public void actionPerformed(ActionEvent e)
   {
     if(e.getSource()==item1)
     {
       removeAll();//移去原来所有组件
       add(circle,"center");//添加圆计算面板
       validate();//保证所有添加的组件可见
     }
     else if(e.getSource()==item2)
     {
       removeAll();
       add(trangle,"center");
       validate();
     }
    
   }
 }  
 
 public class area_1
 {
   public  void main(String args[])
   {
     Win win=new Win();
     win.setBounds(100,100,200,100);
     win.setVisible(true);
     win.addWindowListener(new WindowAdapter()
     {
      public void windowClosing(WindowEvent e)
      {
        System.exit(0);
      }
     });
   }
 } 
}

解决方案 »

  1.   

    因为你在这个类文件中定义了几个内部类,每个内部类都要生成一个class文件的。这个没什么大惊小怪的。
      

  2.   

    1. 你在一个文件里定义了几个类的时候,会出现这种情况,比如
    public class A {}
    class B {}
    class C {}
    这样每个 class 会是一个 .class  文件2. 你定义了内部类的时候会出现这种情况,如
    public class A {
        class B {
        }
    }
    这会产生两个 class 文件,一个 A.class,一个 A$B.class3. 使用了匿名类的时候出出现这种情况,如
    public class A {
        void xxx() {
             button.addActionLisener(new ActionListener() {...});
        }
    }
    这也会产生多个 class,一个 A.class,一个 A$1.class
    }
      

  3.   

    只要运行java area_1 就可以输出结果了,你真得应该仔细阅读一下程序结构...