Java编译后生成的若干个class文件名称解析
2011-11-05 22:16
876 查看
在java中,如果在一个类中定义了内部类,则会生成: superthis.class的文件,如果给某个控件添加了Listener事件,则会生成 superi.class的文件(其中i为Listener的个数)。
例如:下面的程序:
编译后生成的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在实现类中没有缺省的构造函数,在调用的同时,就会产生额外的文件。
例如:下面的程序:
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在实现类中没有缺省的构造函数,在调用的同时,就会产生额外的文件。
相关文章推荐
- javah指令编译class文件生成.h文件找不到android.app.Activity
- Eclipse不能自动编译 java文件,不会生成CLASS
- 【技术贴】解决Eclipse编译java源文件之后没有生成class文件|找不到class文件
- 使用cmd编译java文件成功生成class,但是不能执行
- Eclipse不能自动编译 java文件,不会生成CLASS
- 动态代理---动态生成java文件并编译成class文件
- java文件编译后额外生成的$1.class是怎么一回事
- Tomcat编译JSP页面生成Servlet文件(*.class & *.java)的存放位置
- cmd javah 找不到类文件 javac 编译java文件 找不到符号(把class文件生成.h文件)
- 关于java从编译成class文件到加载再到初始化过程解析
- 根据依赖来编译java文件,生成class
- 动态代理---动态生成java文件并编译成class文件
- 用java语言编译内存中java小程序,并将生成的.class文件保存在一个文件夹下。
- JVM 深入学习:Java 解析 Class 文件过程解析
- Eclipse下报错的java代码也会生成class文件
- ARouter源码解析01-编译生成文件
- MyEclipse 不能编译java文件生成classes文件
- eclipse打开java类编译后的class文件所在目录
- Java生成和解析XML格式文件和字符串的实例代码
- java的class文件反编译