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

Java编译后生成的若干个class文件名称解析

2011-11-05 22:16 876 查看
在java中,如果在一个类中定义了内部类,则会生成: superthis.class的文件,如果给某个控件添加了Listener事件,则会生成 superi.class的文件(其中i为Listener的个数)。

 

例如:下面的程序:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

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 2 beyond compare来比较两种方式的编译结果,发现多出的两个类是GameClient$1.Class和GameBoard$1.Class。

 

1、确认项目最终使用的Java类的编译器。如果可能,尽可能使用javac生成结果应用程序,或是与客户达成一致。

2、尽量明确的书写缺省构造函数及其可见性。

3 、对于引用中的interface--implement在实现类中没有缺省的构造函数,在调用的同时,就会产生额外的文件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息