为什么会生成 <filename>$1.class?
why is <filename>$1.class generated?
enum Day{ SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY}
class Enum1 {
public static void main(String args[]) {
Day day=Day.MONDAY;
switch(day) {
case SUNDAY:
System.out.println("sunday");
break;
case MONDAY:
System.out.println("monday");
break;
default:
System.out.println("other day");
}
}
}
我在编译这段代码时看到 Enum1.class
、Day.class
和 Enum1.class
。当我注释掉 switchcase 部分时,只生成 Enum1.class
和 Day.class
。
switchcase 中的什么原因导致生成额外的 Enum1.class
文件?
在包 de.lhorn
中的 类 上使用 javap
:
Day.class
public final class de.lhorn.so.Day extends java.lang.Enum<de.lhorn.so.Day> {
public static final de.lhorn.so.Day SUNDAY;
public static final de.lhorn.so.Day MONDAY;
public static final de.lhorn.so.Day TUESDAY;
public static final de.lhorn.so.Day WEDNESDAY;
public static final de.lhorn.so.Day THURSDAY;
public static final de.lhorn.so.Day FRIDAY;
public static final de.lhorn.so.Day SATURDAY;
public static de.lhorn.so.Day[] values();
public static de.lhorn.so.Day valueOf(java.lang.String);
static {};
}
Enum1.class
public class de.lhorn.so.Enum1 {
public de.lhorn.so.Enum1();
public static void main(java.lang.String[]);
}
Enum.class
class de.lhorn.so.Enum1 {
static final int[] $SwitchMap$de$lhorn$so$Day;
static {};
}
因此 switch
导致 javac
生成额外的 static final int[] $SwitchMap$de$lhorn$so$Day;
。
enum Day{ SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY}
class Enum1 {
public static void main(String args[]) {
Day day=Day.MONDAY;
switch(day) {
case SUNDAY:
System.out.println("sunday");
break;
case MONDAY:
System.out.println("monday");
break;
default:
System.out.println("other day");
}
}
}
我在编译这段代码时看到 Enum1.class
、Day.class
和 Enum1.class
。当我注释掉 switchcase 部分时,只生成 Enum1.class
和 Day.class
。
switchcase 中的什么原因导致生成额外的 Enum1.class
文件?
在包 de.lhorn
中的 类 上使用 javap
:
Day.class
public final class de.lhorn.so.Day extends java.lang.Enum<de.lhorn.so.Day> {
public static final de.lhorn.so.Day SUNDAY;
public static final de.lhorn.so.Day MONDAY;
public static final de.lhorn.so.Day TUESDAY;
public static final de.lhorn.so.Day WEDNESDAY;
public static final de.lhorn.so.Day THURSDAY;
public static final de.lhorn.so.Day FRIDAY;
public static final de.lhorn.so.Day SATURDAY;
public static de.lhorn.so.Day[] values();
public static de.lhorn.so.Day valueOf(java.lang.String);
static {};
}
Enum1.class
public class de.lhorn.so.Enum1 {
public de.lhorn.so.Enum1();
public static void main(java.lang.String[]);
}
Enum.class
class de.lhorn.so.Enum1 {
static final int[] $SwitchMap$de$lhorn$so$Day;
static {};
}
因此 switch
导致 javac
生成额外的 static final int[] $SwitchMap$de$lhorn$so$Day;
。