您的位置:首页 > 编程语言 > Java开发

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

2013-11-12 11:18 218 查看
总结大家的意见,自己也试了一下,现得出以下结论: 

在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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 对象 控件 class