这个问题很奇怪,百思不得其解?

在一个类中写了这样一个方法,如下:
public static Shape randShape(){
switch((int)(Math.random() * 3)){
case 1:
return new Circle();
case 2:
return new Square();
case 3:
return new Triangle();
default:
}
若不写default:和把default:放在最后则出错如下:
"Shapes.java": Error #: 466 : method does not return a value at line 4, column 34
但是把它放在case 1:上面则顺利通过。百思不得其解,请指教?
在jb5下编译。
[424 byte] By [kanglau-琴剑江湖] at [2007-12-12]
# 1
因为default的情况下也要加返回值啊!
# 2
如果switch()中值在case中找不到匹配的值,就返回。但程序中并没有处理default分支没有的进应该返回什么,或者有default:时返加什么。而randShape()方法要求返回一个Shape。

在添加
default:
return null;
或者在整个switch()外边
return null;
GJA106-中文字符 at 2007-10-24 > top of Msdn China Tech,Java,J2SE,基础类...
# 3
为什么把default:放在case1:上面就可以顺利通过??
kanglau-琴剑江湖 at 2007-10-24 > top of Msdn China Tech,Java,J2SE,基础类...
# 4
default 没有 break, 会执行下面的 case 语句
知道找到一个 break.

好好看看 java 基本的东西吧.
SuperMMX-笑天子 at 2007-10-24 > top of Msdn China Tech,Java,J2SE,基础类...
# 5
因为default:写在哪是无所谓的,但是判断顺序是从上倒下的

因为default:没有break;又写在第一位,所以不满足default:的条件,就继续
执行下一条语句。
aprim-四楞子 at 2007-10-24 > top of Msdn China Tech,Java,J2SE,基础类...
# 6
楼上的朋友,如果照你所说,default:放在最上面(没有break;)与没有default:有什么区别?请指教?SuperMMX朋友。
kanglau-琴剑江湖 at 2007-10-24 > top of Msdn China Tech,Java,J2SE,基础类...
# 7
呵呵,放在最上面当然会执行一下default与case 2:之间的句子(如果有的话),没有default就没有这样的功能了。
swingcoder-摩托骡拉 at 2007-10-24 > top of Msdn China Tech,Java,J2SE,基础类...
# 8
也就是有的话会从case 1执行,这根没有default有什么区别?
kanglau-琴剑江湖 at 2007-10-24 > top of Msdn China Tech,Java,J2SE,基础类...