Java 为什么在下面的代码中注释抛出新的IllegalArgumentException会将行“return typeofDay”错误为“variable not initialized”
注释以下行时,抛出编译错误:Java 为什么在下面的代码中注释抛出新的IllegalArgumentException会将行“return typeofDay”错误为“variable not initialized”,java,Java,注释以下行时,抛出编译错误: public String getTypeOfDayWithSwitchStatement(int dayOfWeekArg) { String typeOfDay; switch (dayOfWeekArg) { case "Monday": typeOfDay = "Start of work week"; break; case "Tuesday":
public String getTypeOfDayWithSwitchStatement(int dayOfWeekArg) {
String typeOfDay;
switch (dayOfWeekArg) {
case "Monday":
typeOfDay = "Start of work week";
break;
case "Tuesday":
case "Wednesday":
case "Thursday":
typeOfDay = "Midweek";
break;
case "Friday":
typeOfDay = "End of work week";
break;
case "Saturday":
case "Sunday":
typeOfDay = "Weekend";
break;
default:
throw new IllegalArgumentException("Invalid day of the week: " + dayOfWeekArg);
}
return typeOfDay;
}
typeOfDay也被视为未初始化变量
但是为什么以前不将其视为未初始化变量。因为如果您的代码流通过默认部分 这里没有抛出异常,您的变量typeOfDay将 事实上,它是未初始化的。当抛出异常时, 编译器知道您不能通过默认值
节,并在它之后继续向下,因为将抛出异常。因为如果您的代码流通过默认节 这里没有抛出异常,您的变量typeOfDay将 事实上,它是未初始化的。当抛出异常时, 编译器知道您不能通过默认值 节,并在它之后继续向下,因为将引发异常。假设dayOfWeekArg包含的不是日期名称,因此在switch语句中达到默认情况 如果您没有在那里抛出异常,执行将继续到方法底部的return语句,但是typeOfDay将不会被设置为任何值。那是个错误 如果抛出异常,则当dayOfWeekArg包含除日期名称以外的任何内容时,将永远无法到达return语句,因此没有问题。假设dayOfWeekArg包含除日期名称以外的其他内容,因此在switch语句中,将到达默认情况 如果您没有在那里抛出异常,执行将继续到方法底部的return语句,但是typeOfDay将不会被设置为任何值。那是个错误
如果抛出异常,当dayOfWeekArg包含除日期名称以外的任何内容时,将永远无法到达return语句,因此没有问题。通读switch语句: 如果变量等于其中一种情况,它将被指定一个值,对吗?但是如果它不等于其中一个语句,会发生什么呢?然后它应该通过默认情况 如果你有一个新的抛出默认情况。。。然后,不会向用户返回任何内容,变量是否初始化也无关紧要。现在,当你评论扔新的。。。编译器意识到有可能返回没有值的变量typeOfDay,因为它没有经过任何case语句,默认语句也没有对它做任何处理
它试图通过警告您可能返回没有值的变量来避免您的头痛。这可以通过初始化变量来解决 通读您的switch语句: 如果变量等于其中一种情况,它将被指定一个值,对吗?但是如果它不等于其中一个语句,会发生什么呢?然后它应该通过默认情况 如果你有一个新的抛出默认情况。。。然后,不会向用户返回任何内容,变量是否初始化也无关紧要。现在,当你评论扔新的。。。编译器意识到有可能返回没有值的变量typeOfDay,因为它没有经过任何case语句,默认语句也没有对它做任何处理 它试图通过警告您可能返回没有值的变量来避免您的头痛。这可以通过初始化变量来解决
throw new IllegalArgumentException("Invalid day of the week: " + dayOfWeekArg);