我正在尝试学习java中的枚举,我写了一段代码来理解valueOf&的使用。值,我理解我的错误,因为valueOf区分大小写,所以抛出了异常。
但是我很惊讶地看到输出不像我预期的那样,根据我的理解,这只能在涉及多个线程时发生,Bur这里只有一个主线程正在运行。 这是我的计划:
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
根据我的第一个 - 每个循环应该被执行然后这个异常应该出现。当我再次尝试执行时,我也得到了这个结果......它给了我这个场景中两个线程参与的暗示......但是我在哪里创建了另一个线程? 在此先感谢
答案 0 :(得分:2)
只涉及一个线程。您在输出的其余部分之前看到异常,因为异常输出到标准错误流(stderr,System.err
),而不是标准输出流(stdout,System.out
)。
标准输出流通常是缓冲的,因此它可能无法立即输出您推入的内容,而标准错误流通常不缓冲。有关此主题的更多信息,请参阅Why do System.err statements get printed first sometimes?。