我试图在java中学习枚举,我写了一个代码来理解valueOf &值,我理解我的错误,因为valueOf是大小写敏感的,所以抛出了异常。
但是我很惊讶地看到输出没有按照我预期的顺序,根据我的理解,这只能发生在涉及多个线程时,但这里只有一个主线程正在运行。下面是我的程序:
public enum Currency {
PENNY(1) {
@Override
public String color() {
return "bronze";
}
},
NICKLE(5) {
@Override
public String color() {
return "bronze";
}
}, DIME(10) {
@Override
public String color() {
return "silver";
}
}, QUARTER(25) {
@Override
public String color() {
return "silver";
}
};
private int value;
public abstract String color();
private Currency(int value) {
this.value = value;
}
public static void main(String[] args) {
for(Currency i: Currency.values()){
System.out.println(i.toString());
}
System.out.println(Currency.valueOf("penny"));
}
}
,这是我得到的输出:
Exception in thread "main" java.lang.IllegalArgumentException: No enum const class learn.enumeration.Currency.penny
at java.lang.Enum.valueOf(Unknown Source)
at learn.enumeration.Currency.valueOf(Currency.java:1)
at learn.enumeration.Currency.main(Currency.java:54)
PENNY
NICKLE
DIME
QUARTER
根据我,首先for-each循环应该执行,然后这个异常应该出现。当我再次尝试执行时,我也得到了这个结果…这给了我在这个场景中涉及到两个线程的提示……但是我在哪里创建了另一个线程??
只涉及一个线程。您会在其他输出之前看到异常,因为异常输出到标准错误流(stderr, System.err
),而不是标准输出流(stdout, System.out
)。
标准输出流通常是缓冲的,所以它可能不会立即输出你输入的内容,而标准错误流通常是而不是缓冲的。有关此主题的详细信息,请参见为什么要使用System。