假如程序进入if条件里,然后再switch里面没有找到对应的(虽然你的if条件能判断它一定会在中间,但是程序在编译时并不知道),所以编译时会以进入if条件但是在swith中没有找到对应的值,而没有return,此时不会进入else语句块,也就是说整个方法没有返回值,但是会编译报错咯。当你把else和大括号去掉,肯定可以啊,因为此时的return“错误”是作为这个方法的一个返回值的。

解决方案 »

  1.   


    判断时,如果if(条件1){}else{},条件1判断后直接跳出if,else而不会去看else?直接去看语句后面?
      

  2.   

    没有返回值,而且返回值类型不对~不是int是String
      

  3.   


    不好意思那个地方打错,上面是string的,我只是想知道他是如何检查这个语句的返回值的
      

  4.   

    编译前的语法检查是按照条件分支进行判断返回值的,虽然 (a<=7&&a>=1)明确了a的取值范围为[1,7],而同时在switch中你对这7个取值都做了处理, 但检查器本身识别不出来这个,它检查到switch中没有default,就认为存在“无return”的可能性,if条件成立时可能无return值,else时有return值,语法检查不通过。去掉大括号后,if中的逻辑是条件执行的,在if条件成立且switch所有分支都不符合执行条件时,末尾的 return "错误";就生效了,此时语法检查器判定不存在无return值的情况,所以语法检查通过。就当前示例而言,if判定是多余的,调整后的代码如下: public static String getWeekText(int weekNumber) {
    switch (weekNumber) {
    case 1:
    return "星期一";
    //2-6略
            case  7:
            return  "星期日";
    default:
    return "错误";
    }
    }
      

  5.   


    判断时,如果if(条件1){}else{},条件1判断后直接跳出if,else而不会去看else?直接去看语句后面?
    我没有看懂你这句话的意思。当你没有运行时,java编译时,会检查你的语法等。它并不知道你的if条件里面能不能一定得到return,所以就会报编译错误。因为你的switch是完全有可能得不到返回值的。当你执行了if块,else块肯定就不执行了,此时就没有返回值啊