为什么java说我没有初始化变量?

时间:2013-03-13 19:04:29

标签: java

以下代码在语句“return mon;”中指向“m”时给出了错误。当在该方法开始时非常清楚地初始化时,它指出“变量mon可能尚未初始化”。它必须是超级简单的东西,我只是不明白!谢谢。

public String monthName(int month)
{
    String mon;
    switch (month)
    {
        case 1:
            mon = "January";
            break;
        case 2:
            mon = "February";
            break;
        case 3:
            mon = "March";
            break;
        case 4:
            mon = "April";
            break;
        case 5:
            mon = "May";
            break;
        case 6:
            mon = "June";
            break;
        case 7:
            mon = "July";
            break;
        case 8:
            mon = "August";
            break;
        case 9:
            mon = "September";
            break;
        case 10:
            mon = "October";
            break;
        case 11:
            mon = "November";
            break;
        case 12:
            mon = "December";
            break;
    }
    return mon;
}

3 个答案:

答案 0 :(得分:12)

谁能说month始终是1到12之间的整数?编译器无法保证它。

mon初始化为null,或在default switch案例中设置行为。 (另外,您可以直接返回月份名称,而不是将它们设置在临时变量中。)

或者,更简单的解决方案可能是

String[] monthNames = {"January", "February", ..., "December"};
return monthNames[month - 1];

答案 1 :(得分:0)

mon中的switch (month)变量分配应该有默认大小写。你也应该为它分配空值。

答案 2 :(得分:0)

如果月号不正确,则返回null只有在调用者期望发生这种情况并且准备检查null时才返回null。

如果调用例程不检查null返回,那么应该在默认情况下抛出RuntimeException。这比允许代码稍后因为错误的月份名称导致的空指针异常而失败要好得多!

例如......

default:
  throw new RuntimeException("Invalid month number "+ month);

这也会阻止编译器抱怨,因为没有办法到mon语句没有初始化的返回语句。