抛出异常是否涉及一个新的不同线程?

时间:2014-06-21 11:04:21

标签: java multithreading exception enums

我正在尝试学习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

根据我的第一个 - 每个循环应该被执行然后这个异常应该出现。当我再次尝试执行时,我也得到了这个结果......它给了我这个场景中两个线程参与的暗示......但是我在哪里创建了另一个线程? 在此先感谢

1 个答案:

答案 0 :(得分:2)

只涉及一个线程。您在输出的其余部分之前看到异常,因为异常输出到标准错误流(stderr,System.err),而不是标准输出流(stdout,System.out)。

标准输出流通常是缓冲的,因此它可能无法立即输出您推入的内容,而标准错误流通常缓冲。有关此主题的更多信息,请参阅Why do System.err statements get printed first sometimes?