今天刚好有同学问了下Java编译后产生的.class文件名的问题,虽然一直都在使用Java做开发,但是之前对编译后产生的.class文件名的规范也基本没做了解过,也真的是忏愧啊!今天无论如何都要总结下。下面是本人今天做的实验

 
1、创建类ClassA,观察产生的.class文件。目的是测试没有任何继承、实现类以及内部类等情况下产生的.class文件以及命名规则
实验结果:
从下图可以看出,只产生了一个.class文件,文件名为类名.class
 
2、创建类ClassB,观察产生的.class文件。目的是测试有实现接口类情况下产生的.class文件以及命名规则
实验结果:
从下图可以看出,只产生了一个.class文件,文件名为类名.class
 
3、创建类ClassC,观察产生的.class文件。目的是测试有继承父类情况下产生的.class文件以及命名规则
实验结果:
从下图可以看出,只产生了一个.class文件,文件名为类名.class
 
对以上3点做个小结:
从以上3个实验来看,编译后产生的.class文件跟它所实现的接口、继承的父类都没有关系,在这些情况下,它都只产生一个.class文件,而且文件名就是类名.class

4、创建类ClassD,定义了一个普通内部类ClassDd,观察产生的.class文件。目的是测试有内部类情况下产生的.class文件以及命名规则
实验结果:
从下图可以看出,产生了2个.class文件,ClassD.class 和 ClassD$ClassDd.class。
这说明产生的.class文件与内部类有关系。外部类产生的文件跟上面的3个实验结果一样,都是类名.class,而内部类,则采用了外部类名$内部类名.class,外部类和内部类名使用符号$隔开
注意:这里的外部类都是相对而言
 
5、创建类ClassD,定义了一个普通内部类ClassDd,再在ClassDd定义它的内部类ClassDdd,观察产生的.class文件。
目的是测试有内部类情况下产生的.class文件以及命名规则
实验结果:
从下图可以看出,产生了3个.class文件,ClassD.class 、 ClassD$ClassDd.class、 ClassD$ClassDd.class$ClassDdd.class。
这个实验结果跟上面的第四个实验是一样的,只是这次的第2层内部类文件是在第1层内部类的基础上增加自己的类名。
注意:这里的外部类都是相对而言
 
 
 
 
对第4和第5个实验做下小结。
以上这两点都是验证有普通内部类情况下产生哪些.class文件以及命名规则如何。最后得出结论如下:
类个数:看定义类的个数,包括外部类和普通的内部类
.class文件名的命名规则:外部类名 + $ + 内部类名 + .class,即等于当层内部类以及每一层外部类的名字叠加,但是每个类之间使用符号$隔开
 
 
 
6、创建类ClassE,定义了一个匿名内部类,观察产生的.class文件。目的是测试有匿名内部类情况下产生的.class文件以及命名规则
实验结果:
从下图可以看出,产生了2个.class文件,ClassE.class 和 ClassE$1.class。
其实这个实验结果跟第4个实验的结果相似,不同的是,内部类由于没有名字,因此采用数字来表示。这数字按照定义的匿名内部类的顺序来一次增加的。
 
 
 
7、创建类ClassF,并在同一个.java文件中定义另外一个类ClassFf,观察产生的.class文件。
目的是同一个.java文件定义的类所产生的.class文件情况
实验结果:
同一个.java文件定义的类所产生的.class文件情况,符合上面上面验证的规范。
 
 
 
 
最后总结:
1、编译后产生的.class文件个数:有多少个类,产生多少个.class文件
 
2、.class文件命名规则:
     2.1普通内部类
           外部类名 + $ + 内部类名 [+ $ + 内部类名 + ...]+ .class,类名之间使用符号$隔开
           例如:ClassD$ClassDd$ClassDdd.class,这里ClassDdd是对底层的普通内部类,它的父类ClassDd,而ClassDd的父类也是最外层的外部类ClassD
     2.2匿名内部类
           外部类名 + $ + 数字 [+ $ + 数字 + ...]+ .class,类名之间使用符号$隔开,数字根据在外部类中定义的顺序决定
           例如:ClassE$1$1.class
 
3、同一个.java文件中定义的其他非public声明的类,都遵循以上2点规范
 
3、继承、或者接口实现,不影响编译产生的.class文件个数和命名规则
 
转自:http://www.cnblogs.com/itmanxgl/p/605b4b093bd8abf5b60ef65749a0857d.html

(转)Java编译后产生class文件的命名规则的更多相关文章

  1. Java编译后产生class文件的命名规则

    今天刚好有同学问了下Java编译后产生的.class文件名的问题,虽然一直都在使用Java做开发,但是之前对编译后产生的.class文件名的规范也基本没做了解过,也真的是忏愧啊!今天无论如何都要总结下 ...

  2. 查看编译后的calss文件编译jdk版本

    使用UtralEdit或者sublime text打开编译后的.class文件, 其中cafe babe为magic number(魔数),标识这个文件是java的class文件. 0033转换成10 ...

  3. weblogic对JSP预编译、weblogic读取JSP编译后的class文件、ant中weblogic.jspc预编译JSP

    我们都知道在weblogic中JSP是每次第一次访问的时候才会编译,这就造成第一次访问某个JSP的时候性能下降,有时候我们也希望JSP被编译成class然后打包在jar中实现隐藏JSP的功能,下面介绍 ...

  4. 转:关于将Java编译过的.class文件打成jar可执行文件/JAR详解

    原文链接:关于将Java编译过的.class文件打成jar可执行文件/JAR详解 如何把 java 程序编译成 .exe 文件.通常回答只有两种,一种是制作一个可执行的 JAR 文件包,然后就可以像. ...

  5. IDEA中部署tomcat,运行JSP文件,编译后的JSP文件存放地点总结

    首先保证你正常部署了Tomcat,并且正常在浏览器中运行了JSP文件. 那么Tomcat编译后的JSP文件(_jsp.class 和 _jsp.java)的存放地点: (一)一般存放在你安装的Tomc ...

  6. javac 编译引用外部指定jar包进行编译和执行编译后的class文件

    1.libs新建文件夹存放依赖所有jar包 2.cmd 执行: 2.1 javac -encoding UTF-8 -classpath .;C:\Users\chenquan\IdeaProject ...

  7. 【jvm】04-我偷偷改了你编译后的class文件

    [jvm]04-我偷偷改了你编译后的class文件 欢迎关注b站账号/公众号[六边形战士夏宁],一个要把各项指标拉满的男人.该文章已在github目录收录. 屏幕前的大帅比和大漂亮如果有帮助到你的话请 ...

  8. java编译后字节码解析

    java编译后字节码解析 参考网摘: https://my.oschina.net/indestiny/blog/194260

  9. target存放的是编译后的.class文件地方 默认情况下不会讲非class文件放入进入 如果要使用非.class文件 需要通过增加配置方式自动加入文件

    target存放的是编译后的.class文件地方 默认情况下不会讲非class文件放入进入 如果要使用非.class文件 需要通过增加配置方式自动加入文件

随机推荐

  1. [POJ] Brackets Sequence

    This problem can be solved elegantly using dynamic programming. We maintain two arrays: cnt[i][j] -- ...

  2. lookcss在深夜23:32开通

    CSS在深夜23:32开通 话说 哥也耐不住寂寞搞个网站玩玩.顺便记录一些生活和学习和工作和思想和神马的点点滴滴~ 好吧 ~本来想起个名字叫涉趣.谁知道百度了一下,已经有人叫这个名字了,杯具,貌似还是 ...

  3. 160810、Java Object类

    Object 类位于 java.lang 包中,是所有 Java 类的祖先,Java 中的每个类都由它扩展而来. 定义Java类时如果没有显示的指明父类,那么就默认继承了 Object 类.例如: p ...

  4. javamail+postfix发送邮件

    由于在做项目时,需要用到邮箱服务.但是不想使用163,qq的,所以就自己搭一个邮箱服务器. 在搜索资料发现postfix是个不错的选择,于是就开始配置了. 这是我搜到的最全的的教程了:http://w ...

  5. 实战docker,编写Dockerfile定制tomcat8镜像,实现web应用在线部署

    最初在tomcat上部署web应用的方式,是通过maven的maven-compiler-plugin插件先打成war包,再将war包复制到tomcat的webapps目录下,后来用上了tomcat7 ...

  6. ovs ovn 学习资料

    0.A Primer on OVN http://blog.spinhirne.com/2016/09/a-primer-on-ovn.html 1.Open Virtual Networking W ...

  7. struts 多文件上传 annotation注解(零配置)+ ajaxfileupload + 异步 版本

    [本文简介] struts 多文件上传.基于”零配置“+"ajaxfileupload" 的一个简单例子. [导入依赖jar包] jquery-1.7.2.js : http:// ...

  8. Touch事件分发机制

    原文:http://www.cnblogs.com/linjzong/p/4191891.html Touch事件分发中只有两个主角:ViewGroup和View.Activity的Touch事件事实 ...

  9. ufs emmc

    UFS 2.0闪存标准使用的是串行界面,很像PATA.SATA的转换.并且它支持全双工运行,可同时读写操作,还支持指令队列. eMMC是半双工,读写必须分开执行,指令也是打包的. 而且UFS芯片不仅传 ...

  10. 阿里、腾讯、京东、微软,各家算法&数据挖掘岗位面经大起底!

    阿里.腾讯.京东.微软,各家算法&数据挖掘岗位面经大起底! 2016-02-24 36大数据 36大数据 作者: 江少华 摘要: 从2015年8月到2015年10月,花了3个月时间找工作,先后 ...