开关状态的默认情况是否有中断?

来自Oracle的示例

public class SwitchDemo {
    public static void main(String[] args) {

        int month = 8;
        String monthString;
        switch (month) {
            case 1:  monthString = "January";
                     break;
            case 2:  monthString = "February";
                     break;
            case 3:  monthString = "March";
                     break;
            case 4:  monthString = "April";
                     break;
            case 5:  monthString = "May";
                     break;
            case 6:  monthString = "June";
                     break;
            case 7:  monthString = "July";
                     break;
            case 8:  monthString = "August";
                     break;
            case 9:  monthString = "September";
                     break;
            case 10: monthString = "October";
                     break;
            case 11: monthString = "November";
                     break;
            case 12: monthString = "December";
                     break;
            default: monthString = "Invalid month";
                     break; //why is there a switch statement here?
        }
        System.out.println(monthString);
    }
}

该页面解释

从技术上讲,最终的休息不是必需的,因为流程不在switch语句中。 建议使用中断,以便修改代码更容易,更不容易出错。 缺省部分处理所有未由其中一个案例部分明确处理的值。

我不确定第二句是否在一般的switch语句中使用断点是正确的,还是特别说明在最后添加break语句会使代码更少出错。 如果我在默认情况下抛出一个异常,那么是否有一点需要在事后调用break或者这是浪费? 在Netbeans红色! 出现在无法达到的break语句旁边,但编译得很好。

关于可读性,如果满足条件时运行的代码跨越几行,应如何格式化一个大小写块? 例如,而不仅仅是monthString = "January"; 有10行代码循环和东西?

我正在使用开关来测试用户是否输入了选项1,2或3的编号。


我不确定第二句是否在一般的switch语句中使用断点是正确的,还是特别说明在最后添加break语句会使代码更少出错。

后者。

如果我在默认情况下抛出一个异常,那么是否有一点需要在事后调用break或者这是浪费?

浪费。 非新手认识到抛出异常是一个事实上的突破。 强大的代码是一回事,试图防止初学者和白痴成为浪费时间。 他们只会用其他方式来打破它。

在Netbeans红色! 出现在无法达到的break语句旁边,但编译得很好。

是的,但你不想要那些红色的! 摆脱它。

关于可读性,如果满足条件时运行的代码跨越几行,应如何格式化一个大小写块? 例如,而不仅仅是monthString =“January”; 有10行代码循环和东西?

考虑把它放在一个单独的方法。

我正在使用开关来测试用户是否输入了选项1,2或3的编号。

在这种情况下,你是否需要默认? 在交换机中不需要它。

在大多数情况下,我认为违约是一个非常糟糕的主意。 例外的情况是,可能会将无效值传递给switch语句,并且需要对此做些什么(抛出异常,显示消息等等)。 否则,每个可能的值都应该有一个案例,即使它是空的,所以很明显,该值是有效的,但是你不打算发生任何事情。


如果你在默认情况下抛出一个异常,break将永远不会被执行,所以你可以离开它。 我个人使用大括号来避免一般处理交换机时的可读性差。

举例来说:

switch (variable) {
   case 1: {
       code;
       mode code;
       break;
   }
   default: {
       break;
   }
}

没有大括号,而是缩进,它也很好读。 例:

    switch (variable) {
       case 1: 
           code;
           mode code;
           break;
       default: {
           break;   
    }

虽然这不是必需的(因为它会在没有break语句的情况下退出),我认为这是一个很好的习惯break; 在你的默认情况下。 通常情况下,当我们开始认为我们知道这一切时,我们最终会介绍一个如果我们坚持基本知识就很容易被阻止的错误。 It's a matter of consistency 。 这与使用大括号表示单行条件语句类似,如下所示:

 if(true)
     do x;
 else
     do y;

VS

if(true) {
    do x;
} else {
    do y;
}

以苹果着名的SSL / TLS bug为例https://www.imperialviolet.org/2014/02/22/applebug.html

链接地址: http://www.djcxy.com/p/84471.html

上一篇: Should the default case of switch statment have a break?

下一篇: Switch without break