默认情况下必须包含在Java的switch语句中

时间:2016-04-04 07:31:37

标签: java switch-statement default

我只是想知道Java中的switch语句中是否必须包含默认情况。我理解包含默认案例是一种好习惯。我问的原因是因为对于下面的代码,如果我删除默认情况,代码将提供错误。有人可以帮我澄清一下这个概念吗?在此先感谢您的帮助!

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"; //if delete will produce error
                     break;
        }
        System.out.println(monthString);
    }
}

3 个答案:

答案 0 :(得分:6)

虽然default子句不是必需的,但如果删除它,monthString可能无法初始化,因此当您尝试使用System.out.println(monthString);打印时会出现编译错误。< / p>

如果在声明时为default提供默认值,则可以删除monthString子句。例如:

String monthString = "Invalid month";

这将提供与当前switch语句相同的行为,其中包括default子句。

答案 1 :(得分:0)

不需要default个案例,但最好有一个案例,因为这会抓住你故意不想处理的案件(或者无意中没有&#t; t 处理)。

作为参考点,Google Java style guide需要default个案例。

在您的代码中,假设您没有要求default案例的特定样式规则的限制,您就不需要它;您只需要明确分配 monthString才能使用它(语言规范中的要求)。但是,为1-12范围之外的月份值指定值是没有意义的 - 这在逻辑上是错误的。

抛出异常是明智之举,例如:

default:
  throw new IllegalArgumentException("Invalid month");

答案 2 :(得分:0)

如果您查看自己的程序,由于初始化错误,您会自行发现错误。

这里

 int month = 8;
 String monthString; //it is a local Variable and not Initialized.

monthString在声明时未初始化,此Variable没有全局访问(不是全局变量),因此可以使用任何构造函数进行初始化或任何其他来源。

在您switch的所有case语句中,您已初始化变量monthString。如果您将每个casedefault视为不同的分支,那么您将意识到在所有可能的分支中,此code正在执行。在每种可能性中,变量monthString都已初始化,但如果删除此代码

default: monthString = "Invalid month"; //if delete will produce error
                     break;

然后可能会出现default个案(如果所有案件都失败)。所以,间接地你不会考虑这个默认值case,但有可能存在这种情况。

如果您仍想删除default个案,请在声明时初始化变量monthString。它还会删除您的编译时错误。

  

这是删除default关键字后出错的原因。

谢谢