为什么在下面的代码中注释抛出新的IllegalArgumentException会将"return typeofDay"行的错误视为"未初始化的变量"

use*_*915 1 java

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;
}
Run Code Online (Sandbox Code Playgroud)

注释以下行,抛出编译错误:

throw new IllegalArgumentException("Invalid day of the week: " + dayOfWeekArg);
Run Code Online (Sandbox Code Playgroud)

typeOfDay被视为未初始化的变量.

但为什么它之前不被视为未初始化的变量.

Jes*_*per 5

假设dayOfWeekArg包含除了一天名称之外的其他内容,因此在switch语句default中达到了案例.

如果不在那里抛出异常,则执行将继续执行return方法底部的语句,但typeOfDay不会设置为任何值.那是一个错误.

如果你确实抛出了异常,那么returndayOfWeekArg包含除了一天的名字之外的其他内容时,永远不会达到该语句,所以没有问题.