带返回值的switch中为什么default放最前面不需要返回值而放最后面就需要?

public class RandomInstrumentGenerator {
    private Random rand = new Random();
    public Instrument next() {
        switch (rand.nextInt(6)) {
            case 0:
                return new Wind(); // return会直接跳出循环,不需要break
            case 1:
                return new Percussion();
            case 2:
                return new Stringed();
            case 3:
                return new Brass();
            case 4:
                return new Woodwind();
            case 5:
                return new Piano();
            default:
        }
    }
}

public class RandomInstrumentGenerator {
    private Random rand = new Random();
    public Instrument next() {
        switch (rand.nextInt(6)) {
            default:
            case 0:
                return new Wind(); // return会直接跳出循环,不需要break
            case 1:
                return new Percussion();
            case 2:
                return new Stringed();
            case 3:
                return new Brass();
            case 4:
                return new Woodwind();
            case 5:
                return new Piano();
        }
    }
}

当default放最后时还会报错:  Missing return statement

 

放前面由于没有break,所以会继续往下执行case 0的return

放最后没有return可执行

default放在前边没有return不报错是因为和下方的case语句共用了同一个return,放在最后的话没有return就报错了

您好,我是问答小助手,你的问题已经有小伙伴为您解答了问题,您可以仔细阅读看是否解决了您的问题。

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~