class RandomShapeGenerator
{
private Random rand = new Random(47);
public Shape next()
{
switch(rand.nextInt(3))
{
default:
case 0: return new Circle();
case 1: return new Square();
case 2: return new Triangle();
}
}
}// Shape是基类,Circle,Square,Triangle是导出类
// 测试多态今天无意中注意到这个default,因为一直习惯是放在最下面,问一下这里为什么一定要放在最上面才行。
{
private Random rand = new Random(47);
public Shape next()
{
switch(rand.nextInt(3))
{
default:
case 0: return new Circle();
case 1: return new Square();
case 2: return new Triangle();
}
}
}// Shape是基类,Circle,Square,Triangle是导出类
// 测试多态今天无意中注意到这个default,因为一直习惯是放在最下面,问一下这里为什么一定要放在最上面才行。
解决方案 »
- HttpClient 模拟登录后如何保持session
- 想做个多线程下载的项目
- 高分求助如何写下面的正则表达式
- 弱弱的问一个关于JAVA成员变量继承的问题
- 十万火急!关于重写JFileChooser中cellEditor的问题
- What's the difference between a programming language, a scripting language, and a markup language?
- 数据库查询,巨不解的问题。
- [002]java初學者問題
- 关于接口中定义final变量和编程风格的问题
- 这是什么意思? (A != B)
- JAVA问题
- 求纯java代码连接sql server2000的用户登陆界面
正常的逻辑是
判断可能先出现的所有条件 是否符合后才去做default操作。这样当别人看到你的代码 ,给人一种清晰感
因为 :
假设 你的有个值是switch 里 运行defalut模块 没有返回语句 就会报错啊 。。 你可以 defalut :break; 不就随便那个地方就可以了
package duotai.linpan;
import java.util.*;class Shape
{
public void draw()
{
}
public void erase()
{
}
}class Circle extends Shape
{
public void draw()
{
System.out.println("Circle.draw()");
}
public void erase()
{
System.out.println("Circle.erase()");
}
}class Square extends Shape
{
public void draw()
{
System.out.println("Square.draw()");
}
public void erase()
{
System.out.println("Square.erase()");
}
}class Triangle extends Shape
{
public void draw()
{
System.out.println("Triangle.draw()");
}
public void erase()
{
System.out.println("Triangle.erase()");
}
}// 一种工厂
class RandomShapeGenerator
{
private Random rand = new Random(47);
public Shape next()
{
switch(rand.nextInt(3))
{
default:
case 0: return new Circle();
case 1: return new Square();
case 2: return new Triangle();
}
}
}public class Shapes
{
private static RandomShapeGenerator gen = new RandomShapeGenerator();
public static void main(String[] args)
{
Shape[] a = new Shape[9];
for( int i = 0; i < a.length; i++)
a[i] = gen.next();
for( Shape shp : a)
shp.draw();
}
}
把default:break;放在最后在这个程序里编译会报错!
注释掉default也会报错。
如果这
case 0: return new Circle();
case 1: return new Square();
case 2: return new Triangle();
不符合switch的话,编译会让你通过马???
有了default:那就好了,肯定有返回值了
我的意思不知道你懂了吗?
因为我试过default: break;放在最后是错误的,但是我写default: return new Circle();就没问题了我想知道的是放在第一句default:为什么就对了?后面为什么不要返回值?
case 0: return new Circle();
case 1: return new Square();
case 2: return new Triangle();这样的意思是说什么?
是说不管是不是0,1,2,都先执行default: 这条语句假如不是,0,1,2 执行default是什么样?往后的流程是什么?假如是0,也先执行default?那往后的流程是什么?就是不懂他写在第一句是怎么执行的?
{
default:
case 0: return 0;
case 1: return 1;
case 2: return 2;
}
我试了一下这个返回0,
当defalut中条件都不满足时,执行了第一条语句;
呵呵,我也学到了
你不是写的是语句块吗,这里面有返回类型就行了
则从default开始执行,一直到遇到break,或者到switch退出为止
public static void main(String[] args) {
for (int i=0;i<10;i++) {//没有default部分结果就成了:1 2 3
switch(i) {
/* ======这里是把default放到上面的情况。
default://把下面两行删掉结果就成了:0 1 2 3 4 5 6 7 8 9
System.out.print(i+" ");//单独删除这一行结果就成了:1 2 3
break;//单独删除这一行结果就成了:0 0 1 2 3 4 4 5 5 6 6 7 7 8 8 9 9
*/
case 1:
System.out.print(i+" ");
break;
case 2:
System.out.print(i+" ");
break;
case 3:
System.out.print(i+" ");
break;
default://把下面两行删掉结果就成了:1 2 3
System.out.print(i+" ");//单独删除这一行结果就成了:1 2 3
break;//一般default放到尾部不需要这一行,单独删除这一行结果还是:0 1 2 3 4 5 6 7 8 9
//以上代码不删除任何一行结果为:0 1 2 3 4 5 6 7 8 9
/*同样的把default放到中间某部分也没有错误!所以我还是认为
default可以放到default语句的任何地方,只是放到不同的地方
运行结果可能不同。*/
}
}
}
}
public class Test {
public static void main(String[] args) {
for (int i=0;i<10;i++) {//没有default部分结果就成了:1 2 3
switch(i) {
/* ======这里是把default放到上面的情况。
default://把下面两行删掉结果就成了:0 1 2 3 4 5 6 7 8 9
System.out.print(i+" ");//单独删除这一行结果就成了:1 2 3
break;//单独删除这一行结果就成了:0 0 1 2 3 4 4 5 5 6 6 7 7 8 8 9 9
*/
case 1:
System.out.print(i+" ");
break;
case 2:
System.out.print(i+" ");
break;
case 3:
System.out.print(i+" ");
break;
default://把下面两行删掉结果就成了:1 2 3
System.out.print(i+" ");//单独删除这一行结果就成了:1 2 3
break;//一般default放到尾部不需要这一行,单独删除这一行结果还是:0 1 2 3 4 5 6 7 8 9
//以上代码不删除任何一行结果为:0 1 2 3 4 5 6 7 8 9
/*同样的把default放到中间某部分也没有错误!所以我还是认为
default可以放到default语句的任何地方,只是放到不同的地方
运行结果可能不同。*/
}
}
}
}