Out of curiosity, why are sometimes multiple Java .class files generated for a class after compilation? For example, my application has six classes. For one class, a total of 10 .class files has been generated, starting from MyClass#1 up to MyClass#10.
相关问题
- Delete Messages from a Topic in Apache Kafka
- Jackson Deserialization not calling deserialize on
- How to maintain order of key-value in DataFrame sa
- StackExchange API - Deserialize Date in JSON Respo
- Difference between Types.INTEGER and Types.NULL in
To add to the answers above, this is another good example of generated inner classes based on Comparators (each Comparator is compiled in a different MyClass$X.class):
One java source file can generate multiple class files, if your class contains inner classes. Anonymous inner classes are represented by your numbered class files.
Every class in java belongs to a .java-file, but a .java-file can contain multiple classes. That includes inner and anonymous classes. The .class-files generated for inner classes contain a '$' in their name. Anonymous inner classes get numbers.
These are for inner classes and static nested classes. The ones with numbers are anonymous inner classes.
For example:
This will produce class files
Foo.class
,Foo$Bar.class
,Foo$Baz.class
andFoo$1.class
(for the implementation of theHelper
interface)You get more .class fils from a single source file if
the class contains inner classes or static inner classes. Inner classes can nest. Their names are
<outer class name>$<inner class name>
.inner interfaces which are always static.
anonymous inner classes (which in fact are plain inner classes without a name)
package access interfaces and classes before and after your main class. You can have an arbitrary number of package access classes and interfaces in a single Java source file. Usually small helper objects that are only used by the class are just put into the same file.
If there is one X.java file and if it contains 4 collections.sort() {} then after compilation X.class,X$1.class,X$2.class,X$3.class,X$4.class will get generated.
In case of inner class and static inner class more .class files get generated.