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



我试图在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。

最新更新