为什么我的程序编译后生成很多*$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中,如果在一个类中定义了内部类,刚会生成: 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
相关文章推荐
- 为什么我的程序编译后生成很多*$1.class文件?
- ubuntu用qt creator写的程序编译后生成的可执行文件复制到另一个系统中需要哪些文件才能运行
- 用java语言编译内存中java小程序,并将生成的.class文件保存在一个文件夹下。
- 一个简单的 C 程序文件,经过 0、编写,1、预处理,2、编译,3、链接,终于生成了一个可执行文件
- C/C++程序编译步骤 如何生成可执行文件
- winform程序在编译时,如何自动将文件生成到debug目录下?
- C/C++程序从编译到最终生成可执行文件的过程分析
- C/C++程序编译步骤 如何生成可执行文件
- c++程序编译后自动生成的文件有什么用
- 为什么delphi编译生成的exe文件这么大?
- 事实又一次证明,编译EXE程序时生成MAP文件是很有必要的
- C/C++程序从编译到最终生成可执行文件的过程分析
- c++程序编译后自动生成的文件有什么用
- C/C++程序编译步骤 如何生成可执行文件
- C/C++程序编译步骤 如何生成可执行文件
- 在 msbuild 生成时,每次都生成很多css,js,img 文件,如果不想每次编译都有这些需要这样配置
- C/C++程序从编译到最终生成可执行文件的过程分析
- 学习使用AutoMake1.9的自动生成工程文件(二)——flat型程序编译实践过程
- .Net中编译程序生成文件的版本号
- C/C++程序从编译到最终生成可执行文件的过程分析