一个java源文件javac出多个class文件出来!是怎么回事?在线等!

时间:2022-12-24 19:57:30
一个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);
      }
     });
   }
 } 
}







6 个解决方案

#1


因为你在这个类文件中定义了几个内部类,每个内部类都要生成一个class文件的。

这个没什么大惊小怪的。

#2


lz不怕
it is正常的

#3


那我怎么执行这个程序呢?

#4


1. 你在一个文件里定义了几个类的时候,会出现这种情况,比如
public class A {}
class B {}
class C {}
这样每个 class 会是一个 .class  文件

2. 你定义了内部类的时候会出现这种情况,如
public class A {
    class B {
    }
}
这会产生两个 class 文件,一个 A.class,一个 A$B.class

3. 使用了匿名类的时候出出现这种情况,如
public class A {
    void xxx() {
         button.addActionLisener(new ActionListener() {...});
    }
}
这也会产生多个 class,一个 A.class,一个 A$1.class
}

#5


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

#6


谢谢楼上各位!

#1


因为你在这个类文件中定义了几个内部类,每个内部类都要生成一个class文件的。

这个没什么大惊小怪的。

#2


lz不怕
it is正常的

#3


那我怎么执行这个程序呢?

#4


1. 你在一个文件里定义了几个类的时候,会出现这种情况,比如
public class A {}
class B {}
class C {}
这样每个 class 会是一个 .class  文件

2. 你定义了内部类的时候会出现这种情况,如
public class A {
    class B {
    }
}
这会产生两个 class 文件,一个 A.class,一个 A$B.class

3. 使用了匿名类的时候出出现这种情况,如
public class A {
    void xxx() {
         button.addActionLisener(new ActionListener() {...});
    }
}
这也会产生多个 class,一个 A.class,一个 A$1.class
}

#5


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

#6


谢谢楼上各位!