-
think in java中一段代码的疑惑,关于switch10
public Shape next() { switch (random.nextInt(3)) { default: case 0: return new Circle(); case 1: return new Square(); case 2: return new Triangle(); } }
default放在'return new Triangle();'下面,eclipse会出现红x,you must return a result of type Shape,这很好理解
default放在'case 0'上面,就不会出现上面的编译错误,不懂是为什么,可能switch-case的机制还没有理解透?
哪位大虾帮忙解释解释
问题补充
这是怎么了。。20几个阅读,没有回复的
问题补充gtssgtss 写道自动贯穿。。。。
这是一个很垃圾的特性。。。。
太基础了,大家都不想打字,详细还是去看书吧
我被鄙视了。。还真不知道这特性
问题补充gtssgtss 写道自动贯穿。。。。
这是一个很垃圾的特性。。。。
太基础了,大家都不想打字,详细还是去看书吧
你说的是哪本书?自动贯穿这名称google没搜到
问题补充
确实是很纠结的一个特性。。
实验了一把
找到了一段话,自己也总结了一点
没有case匹配的时候,执行default中的内容,default中没有退出switch-case的语句,默认执行default下面case下的语句,如果第一个case下没有return,会接着执行下面的case,一直执行到return 语句
switch (10) {
default:
case 0:
System.out.println("0");
case 1:
System.out.println("1");
case 2:
return new Triangle();
}
这样改的话,它就会打印出0,1,然后return
问题补充lqixv 写道估计你是看书不仔细。你回头看看对 switch 语句的解释,在 case 里,如果没有 break 是不会跳出 switch 的。因此,你把 default 放在后面的话,就相当于 在找不到 0、1、2 时,没有return 值了。而你的方法本应该返回 Shape,那肯定报错了
估计你问题没有看清楚吧,我知道case 没有break是不会跳出的,这里讨论的是如果没有case可以匹配上,default放在最上面,会执行default下的case,直到return或break为止。2011年6月20日 10:41
30个答案 按时间排序 按投票排序
-
default 应该加返回值,否则整个函数都没有返回值。放在最上面,主要是因为default后没有break,它还会继续往下执行。下面可以返回一个结果,所以没有报错。
2011年6月20日 10:41
-
其实大家没有理解楼主的意思
我觉得是因为random.nextInt(3)不会产生0、1、2之外的case分支,所以在default使用自动贯穿,我想这是因为作者的程序已考虑所有分支,所以default放在上面(缺省返回值)反而更简洁。2011年6月20日 10:41
-
switch语句,满足了case条件,执行相应的代码后,如果没有break或return,不会跳出switch,而会继续顺序执行下去,至到遇到break或return。
若是default写在前面,至到执行完第5行,才返回。
若是写在后面,没有返回类型,当然就报错咯。2011年6月20日 10:41
-
是这样滴,你Default 放在上面是有默认的放回的..返回Default之后 return之前的内容,Default 放在最后 没有返回匹配的类型..唉.
2011年6月20日 10:41
-
googya 写道chiaun 写道
public Shape next() { switch (random.nextInt(3)) { default: case 0: return new Circle(); case 1: return new Square(); case 2: return new Triangle(); } }
这样会不会比较好理解一点...
case没有break或是return是不会跳出直到 } 为止。
若default放到最后面的话会导致缺少了return而报错。
不是这样理解的吧。。。
default就是一个大的标签,下面有三个case,在三个case中选择一个返回。
晕掉了,怎么最后楼是这个答案,很误导大众啊,
如果照你这个说法
case 0:
case 1:
return a;
是不是0也是一个大的标签?
其实default跟其他值的case没什么区别,只不过他表示所有其他值的处理方式,放在前边可以直接break退出,也可以不带break直接进入case 1(例子中的写法)
如果放在后边,就要跟其他case一样的格式,带上返回值!2011年6月20日 10:41
-
chiaun 写道
public Shape next() { switch (random.nextInt(3)) { default: case 0: return new Circle(); case 1: return new Square(); case 2: return new Triangle(); } }
这样会不会比较好理解一点...
case没有break或是return是不会跳出直到 } 为止。
若default放到最后面的话会导致缺少了return而报错。
不是这样理解的吧。。。
default就是一个大的标签,下面有三个case,在三个case中选择一个返回。2011年6月20日 10:41
-
gtssgtss 写道w445097062 写道gtssgtss 写道自动贯穿。。。。
这是一个很垃圾的特性。。。。
太基础了,大家都不想打字,详细还是去看书吧
你说的是哪本书?自动贯穿这名称google没搜到
这个特性似乎没有正式的名字,我唯一看到把这个特性命名的地方是javascript语言精粹
这个行为的名字叫“fall through”。引用As in C and C++, execution of statements in a switch block "falls through labels."
<< http://java.sun.com/docs/books/jls/third_edition/html/statements.html#14.112011年6月20日 10:41
-
貌似叫case穿透吧。。但是楼主说的不是这个问题。。怀疑是think in java的错误。。要么就是后来的jdk不支持这种写法了。。要么就是eclipse不支持。。要么就是我说错了
2011年6月20日 10:41
-
第一,肯定每个case都得break
第二,当default放在最后的时候,也必须加return,而你放在第一位,运行的和case0一样2011年6月20日 10:41
-
lantian_123 写道qianhd 写道还是趁早转行吧
不要这样说别人,都是过来人
哈哈哈哈,过来人就不要笑正在过来的人啦。谁没有短路的时候呢,呵呵2011年6月20日 10:41
-
额。 。有人回答CASE 0:CASE 1:CASE 2:return Circle();其实也已经说明了问题。我先给一个反汇编后的代码。源代码:
public static Shape next() { Random random = new Random(); switch (random.nextInt(3)) { default: case 0: return new Circle(); case 1: return new Square(); case 2: return new Triangle(); case 3: return new Triangle(); } }
这里其实default和case 0:都会返回Circle,把switch (random.nextInt(3)) 改成switch(4)就可以了。
汇编代码如下:L1 (5) LINENUMBER 14 L1 ICONST_5 TABLESWITCH 0: L2 1: L3 2: L4 3: L5 default: L2 L2 (8) LINENUMBER 17 L2 NEW Circle DUP INVOKESPECIAL Circle.<init>()V ARETURN
当是default的时候 就到L2 ,L2 NEW Circle 。
简而言之:
其实就是CASE 0:CASE 1:CASE 2:return Circle();的问题2011年6月20日 10:41
-
如果default放在最后加上一个return也是正确的,所以就是说明编译器发现你在最后没有返回值,因此报错。要考虑完全,如果default放在最前面没有break和return 他还会继续向下运行,因此不会报错!
2011年6月20日 10:41
-
所以才有这样的代码
switch (10) {
default: break;
case 0:
System.out.println("0"); break;
case 1:
System.out.println("1"); break;
case 2:
return new Triangle();
}2011年6月20日 10:41
-
public Shape next() { switch (random.nextInt(3)) { default: case 0: return new Circle(); case 1: return new Square(); case 2: return new Triangle(); } }
这样会不会比较好理解一点...
case没有break或是return是不会跳出直到 } 为止。
若default放到最后面的话会导致缺少了return而报错。2011年6月20日 10:41
-
真的不想打字:
case 0:
case 1:
case 2:
return 3;
case 3:
case 4:
return 5;
----------
你的default和case 0同用一个return2011年6月20日 10:41
-
估计你是看书不仔细。你回头看看对 switch 语句的解释,在 case 里,如果没有 break 是不会跳出 switch 的。因此,你把 default 放在后面的话,就相当于 在找不到 0、1、2 时,没有return 值了。而你的方法本应该返回 Shape,那肯定报错了
2011年6月20日 10:41
-
w445097062 写道gtssgtss 写道自动贯穿。。。。
这是一个很垃圾的特性。。。。
太基础了,大家都不想打字,详细还是去看书吧
你说的是哪本书?自动贯穿这名称google没搜到
这个特性似乎没有正式的名字,我唯一看到把这个特性命名的地方是javascript语言精粹2011年6月20日 10:41
相关推荐
"Think in Java第三版代码"则提供了书中习题和示例的源代码,便于读者理解和实践。 在提供的压缩包文件中,我们可以看到以下文件: 1. `tij.jcsc`:这可能是《Think in Java》书中某个章节或习题的Java类文件,...
《Think in Java 4》是Java编程领域的一部经典之作,由Bruce Eckel撰写,它以其深入浅出的讲解方式和丰富的示例代码深受程序员喜爱。这个压缩包包含的就是这本书的全部源代码,旨在帮助读者更好地理解和实践书中所...
《Think in Java 3》是一本深受欢迎的Java编程指南,由Bruce Eckel撰写,它以其详尽的解释和丰富的示例闻名。这本书是许多Java初学者和专业开发者的重要参考资料,旨在帮助读者深入理解Java语言的核心概念和机制。...
《Think in Java 中文第四版》是学习Java编程的经典之作,由Bruce Eckel撰写,它深入浅出地讲解了Java语言的核心概念和技术。本部分主要涵盖的是书籍的第二部分,通常涉及面向对象编程的深入探讨,包括类、对象、...
以下是对《Think in Java》源码中一些重要知识点的详细解读: 1. **面向对象编程基础**:书中通过丰富的例子展示了类、对象、封装、继承和多态等面向对象编程的基本概念。源码中你可以看到如何定义类,如何创建对象...
《Think in Java》是 Bruce Eckel 的经典著作,它深入浅出地讲解了Java编程语言的核心概念和技术。这本书强调理解编程思想,而不仅仅是学习语法。练习题是学习过程中的重要部分,它们帮助我们巩固理论知识,提升实际...
Think in java 源码构建编译
java think in java (英文第四版)至今为止 被认为是java教程之中权威作品之一
《Think in Java》是Java编程领域的一本经典著作,由Bruce Eckel撰写,中文版的出现使得更多中国程序员能够深入理解和掌握Java编程语言的核心概念。这本书以其深入浅出的讲解方式,深受程序员们的喜爱,是许多初学者...
think in java 第四版 源码以及作业 eclipse版本 包含jar包 可以直接导入eclipse
《Think in Java》是Bruce Eckel的经典编程教材,它深入浅出地讲解了Java语言的各个方面,深受程序员喜爱。这个压缩包包含的资源是该书的习题解答和相关代码,对于学习和进阶Java编程有着极大的帮助。 一、...
Think in Java(美)Bruce Eckel 著 陈昊鹏 译 引言 同人类任何语言一样,Java为我们提供了一种表达思想的方式。如操作得当,同其他方式相 比,随着问题变得愈大和愈复杂,这种表达方式的方便性和灵活性会显露无遗。 ...
Think Data Structures in Java 英文azw3 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
《Think In Java 4》是Java编程领域里一本极具影响力的著作,由资深程序员 Bruce Eckel 编著。这本书以其深入浅出的讲解方式和全面的知识覆盖而闻名,被誉为Java学习者的经典读物。中文版的完美高清版本为国内读者...
《Think in Java 3(中文完整版)》是Java编程领域的一本经典著作,由Bruce Eckel撰写,针对中文读者提供了完整的翻译版本。这本书旨在帮助读者深入理解Java语言,建立起面向对象编程的思想,并掌握实际开发中的技巧。...
《Think in JAVA 编程思想》是Java编程领域的一本经典著作,由Bruce Eckel撰写。第四版作为该书的最新版本,包含了作者对Java语言深入的理解和丰富的编程经验,旨在帮助读者理解面向对象编程的核心理念,并提升编程...
《Think in Enterprise JAVA》是基于Java企业级应用的深度解析,由知名编程专家Bruce Eckel撰写。这本书以其独特的视角和深入浅出的讲解方式,帮助读者理解并掌握在企业环境中使用Java进行开发的关键技术和思想。 ...
《Think in Java》是Java编程领域的一本经典著作,作者是Bruce Eckel。第11章的主题是“持有对象”,这一章主要探讨了如何在Java中创建和管理对象,包括对象的引用、对象的生命周期、类与对象的关系,以及如何通过...
抽象的进步 1.2 对象的接口 1.3 实现方案的隐藏 1.4 方案的重复使用 1.5 继承:重新使用接口 1.5.1 改善基础类 1.5.2 等价和类似关系 1.6 多形对象的互换使用 1.6.1 动态绑定 ...1.11 Java和因特网