Java编译后的clas文件命名问题

由于公司电脑是内网,仅有一个没有打开过的vscode,用起来很麻烦,而我只需要做做leetcode题就行了,所以直接用编辑器写.java文件,然后javac编译成class文件,再使用java class名运行,因为有段时间没有摸过java了,所以有点生疏。发现了一些问题。

 

我创建了两个.java文件,一个是主类用来执行需要运行的代码,另一个测试类用于测试一些小语句或者小功能。于是我开始写……写完开始编译,执行javac getindex.java 生成了一个test.class文件,再执行java test,ok运行成功。接着我试一下测试类,发现也生成了一个test.class,这时候就优点奇怪了,为什么两个java文件生成的class文件名字是同一个呢……经过仔细检查,发现原来我写测试类的时候是把主类的代码复制过去,test这个类名也复制过去了,所以生成的class文件是同一个名字的。这里标记一下,class命名的规则:

  • 编译后产生的class数量取决于类的数量
  • 继承父类或者实现接口,都不影响编译后的class文件数量
  • 普通内部类产生多个class文件,内部类的class文件名为:外部类名$内部类名,如果是多层嵌套内部类,则会继续叠加
  • 匿名内部类产生多个class文件,匿名内部类class文件名为:外部类名$匿名内部类名+数字,这里的数字就是层级
  • 同一个java文件中存在多个类,规则也和上述一致
posted @ 2021-12-27 21:15  我永远喜欢石原里美  阅读(96)  评论(0编辑  收藏  举报