为什么我的程序编译后生成很多*$1.class文件?

总结大家的意见,自己也试了一下,现得出以下结论: 
在java中,如果在一个类中定义了内部类,刚会生成: super&this.class的文件,如果给某个控件添加了Listener事件,则会生成 super&i.class的文件,其中i为Listener的个数。 
例如:下面的程序: 
import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 




/** 
* <p>Title: </p> 
* <p>Description: </p> 
* <p>Copyright: Copyright (c) 2001</p> 
* <p>Company: </p> 
* @author unascribed 
* @version 1.0 
*/ 


public class a extends JFrame { 
JPanel jPanel1 = new JPanel(); 
JButton jButton1 = new JButton(); 
JButton jButton2 = new JButton(); 
JButton jButton3 = new JButton(); 


public a() { 
try { 
jbInit(); 

catch(Exception e) { 
e.printStackTrace(); 


private void jbInit() throws Exception { 
jButton1.setText("jButton1"); 
jButton1.addActionListener(new java.awt.event.ActionListener() { 
public void actionPerformed(ActionEvent e) { 
jButton1_actionPerformed(e); 

}); 
jButton2.setText("jButton2"); 
jButton2.addActionListener(new java.awt.event.ActionListener() { 
public void actionPerformed(ActionEvent e) { 
jButton2_actionPerformed(e); 

}); 
jButton3.setText("jButton3"); 
jButton3.addActionListener(new java.awt.event.ActionListener() { 
public void actionPerformed(ActionEvent e) { 
jButton3_actionPerformed(e); 

}); 
this.getContentPane().add(jPanel1, BorderLayout.CENTER); 
jPanel1.add(jButton1, null); 
jPanel1.add(jButton2, null); 
jPanel1.add(jButton3, null); 



void jButton1_actionPerformed(ActionEvent e) { 





void jButton2_actionPerformed(ActionEvent e) { 





void jButton3_actionPerformed(ActionEvent e) { 



class b{ 

class c{ 
class c1{} 


编译后生成的class文件有: 
a.class 
a$1.class //jButton1.addActionListener 
a$2.class //jButton2.addActionListener 
a$3.class //jButton3.addActionListener 
a$b.class 
a$c.class 
a$c1.class 
但如果a.java这样定义: 
class a{ 

class b{ 

注意为同一个文件: 
刚编译后生成b.class,a.class 
而不是a$b.class
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值