在IntelliJ中编译Java内部类:为何仅出现Book.class?类文件位置解析
为什么IDE里只看到Book.class,命令行却生成两个class文件?
嘿,这个问题我当初备考Java的时候也纠结过!其实真相很简单——不是IDE没生成另一个文件,只是它把内部类的class文件「折叠隐藏」了,实际两个文件都好好存在着。
核心原理先搞懂
不管用命令行javac Book.java还是IDE编译,这段代码都会生成两个class文件:
Book.class:对应外部类BookBook$BookReader.class:对应成员内部类BookReader,Java规定成员内部类编译后会生成独立的class文件,命名规则就是外部类名$内部类名.class
IDE的「贴心折叠」是关键
像IntelliJ这类IDE,为了让项目结构更清爽,默认会把内部类、匿名内部类对应的class文件和外部类的class文件折叠在一起。你只需要点击Book.class左边的小三角箭头(展开按钮),就能看到藏在下面的Book$BookReader.class了。
怎么验证?
- 直接去项目的编译输出目录找:比如IntelliJ里的
out/production/[你的模块名称]或者Maven项目的target/classes目录,打开就能看到两个class文件,和命令行编译的结果完全一致。 - 要是想改显示方式,也可以去IDE设置里调整(比如IntelliJ的
Settings→Editor→File Types,不过默认的折叠模式其实更方便找文件)。
备考小贴士
这个知识点常考的是「内部类的编译产物」,记住成员内部类会生成独立的class文件,IDE的显示只是优化,本质和命令行编译结果一致,别被表象迷惑哦!
内容的提问来源于stack exchange,提问作者Cesar
相关产品推荐
相关产品推荐

