先看一段代码:

public class Test{
public static void main(String[] args){
System.out.println("2 = "+ toNumberCase());
}
} public static String toNumberCase(int n){
String str = "";
switch(n){
case : str = "我是0";
case : str = "我是1";
case : str = "我是2";
case : str = "我是3";
case : str = "我是4";
case : str = "我是5";
case : str = "我是6";
case : str = "我是7";
case : str = "我是8";
case : str = "我是9";
}
return str;
}

结果是 "2 = 我是2" ?其实不是,结果是

先来分析一下:

由于每个case语句后面少加了break关键字。程序从”case 2"后面的语句开始执行,直到找到break语句结束,可惜的是我们的程序中没有break语句,
于是在程序执行的过程中,str的赋值语句会执行多次,从等于"我是0"、等于"我是1”...等于"我是9",Switch语句执行结束了。于是结果就是如此了。

结论:switch-case语句,如果在每个case语句后面少加了break关键字。程序从该case分支继续执行下一个分支,直到遇见break后或执行完最后一个分支,switch语句执行结束。记住在case语句后面随手写上break语句,养成良好的习惯。

PS:对于此类问题,还有一个简单的解决办法:修改Eclipse的警告级别。Performaces->Java->Compiler->Errors/Warnings->Potential Programming->problems,然后修改'switch' case fall-through为Error级别,你如果没有在case语句中加入break,Eclipse会直接报错。

补充:defalut放在不同位置,对结果的影响

先看几个例子:

例子1:

package com.test;

public class testbreak {
public static void main(String[] args) {
System.out.println("10 = "+ toNumberCase(10));
}
public static String toNumberCase(int n){
String str = "";
switch(n){
default : str = "我是default";
case 0: str = "我是0"; break;
case 1: str = "我是1"; break;
case 2: str = "我是2"; break;
case 3: str = "我是3"; break;
case 4: str = "我是4"; break;
case 5: str = "我是5"; break;
case 6: str = "我是6"; break;
case 7: str = "我是7"; break;
case 8: str = "我是8"; break;
case 9: str = "我是9"; break;
}
return str;
}
}

结果:

例子2:

package com.test;

public class testbreak {
public static void main(String[] args) {
System.out.println("10 = "+ toNumberCase(10));
}
public static String toNumberCase(int n){
String str = "";
switch(n){
case 0: str = "我是0"; break;
case 1: str = "我是1"; break;
case 2: str = "我是2"; break;
case 3: str = "我是3"; break;
case 4: str = "我是4"; break;
default : str = "我是default";
case 5: str = "我是5"; break;
case 6: str = "我是6"; break;
case 7: str = "我是7"; break;
case 8: str = "我是8"; break;
case 9: str = "我是9"; break;
}
return str;
}
}

结果:

例子3:

package com.test;

public class testbreak {
public static void main(String[] args) {
System.out.println("10 = "+ toNumberCase(10));
}
public static String toNumberCase(int n){
String str = "";
switch(n){
case 0: str = "我是0"; break;
case 1: str = "我是1"; break;
case 2: str = "我是2"; break;
case 3: str = "我是3"; break;
case 4: str = "我是4"; break;
case 5: str = "我是5"; break;
case 6: str = "我是6"; break;
case 7: str = "我是7"; break;
case 8: str = "我是8"; break;
case 9: str = "我是9"; break;
default : str = "我是default";
}
return str;
}
}

结果:

前3个例子,我把default放在不同的位置, 但是没有加break

接下来再看几个例子:

例子4:

package com.test;

public class testbreak {
public static void main(String[] args) {
System.out.println("10 = "+ toNumberCase(10));
}
public static String toNumberCase(int n){
String str = "";
switch(n){
default : str = "我是default"; break;
case 0: str = "我是0"; break;
case 1: str = "我是1"; break;
case 2: str = "我是2"; break;
case 3: str = "我是3"; break;
case 4: str = "我是4"; break;
case 5: str = "我是5"; break;
case 6: str = "我是6"; break;
case 7: str = "我是7"; break;
case 8: str = "我是8"; break;
case 9: str = "我是9"; break;
}
return str;
}
}

结果:

例子5:

package com.test;

public class testbreak {
public static void main(String[] args) {
System.out.println("10 = "+ toNumberCase(10));
}
public static String toNumberCase(int n){
String str = "";
switch(n){
case 0: str = "我是0"; break;
case 1: str = "我是1"; break;
case 2: str = "我是2"; break;
case 3: str = "我是3"; break;
case 4: str = "我是4"; break;
default : str = "我是default"; break;
case 5: str = "我是5"; break;
case 6: str = "我是6"; break;
case 7: str = "我是7"; break;
case 8: str = "我是8"; break;
case 9: str = "我是9"; break;
}
return str;
}
}

结果:

例子6:

package com.test;

public class testbreak {
public static void main(String[] args) {
System.out.println("10 = "+ toNumberCase(10));
}
public static String toNumberCase(int n){
String str = "";
switch(n){
case 0: str = "我是0"; break;
case 1: str = "我是1"; break;
case 2: str = "我是2"; break;
case 3: str = "我是3"; break;
case 4: str = "我是4"; break;
case 5: str = "我是5"; break;
case 6: str = "我是6"; break;
case 7: str = "我是7"; break;
case 8: str = "我是8"; break;
case 9: str = "我是9"; break;
default : str = "我是default"; break;
}
return str;
}
}

结果:

再看这3个例子,每个都加break

总结:

基础逻辑都是:default的运用,是当switch语句里,所有的case语句都不满足条件时,则执行default语句
在这里我们要分几种情况讨论:

default在switch开头:
若所有case都不满足条件,则执行default语句,并执行default语句之后的case语句,直到break或结束

default在switch中间:(同上)
若所有case都不满足条件,则执行default语句,并执行default语句之后的case语句,直到break或结束

default在switch末尾:
若所有case语句都不满足条件,则执行default语句,结束;若有case满足,则执行case语句直到遇到break或switch语句结束,所以default在最后一行时break可以省略不写(但是不建议省略,以求严谨)

提高java编程质量 - (五)switch语句break不能忘以及default不同位置的用法的更多相关文章

  1. Java之戳中痛点 - (5)switch语句break不能忘以及default不同位置的用法

    先看一段代码: public class Test{ public static void main(String[] args){ System.)); } } public static Stri ...

  2. 提高java编程质量 - (四)i++ 和 ++i 探究原理

    先看一个例子: package com.test; public class AutoIncrement { public static void main(String[] args) { int ...

  3. 提高java编程质量 - (二)取余用偶判断,不要用奇判断

    取余判断原则:取余用偶判断,不要用奇判断 先看一个 程序: package com.test; import java.util.Scanner; public class t1 { public s ...

  4. 提高java编程质量 - (一)易变业务使用脚本语言编写

    脚本语言的3大特征: 1.灵活:脚本语言一般是动态类型,可以不声明变量类型直接使用,也可以在运行期改变类型:2.便捷:脚本语言是解释性语言,在运行期变更非常方便,而不用重启服务3.简单:脚本语言语法比 ...

  5. 提高java编程质量 - (三)三目运算符的两个操作数类型尽量一致

    先看一个例子: package com.test; public class TernaryOperator { public static void main(String[] args) { in ...

  6. 提高Java代码质量的Eclipse插件之Checkstyle的使用详解

    提高Java代码质量的Eclipse插件之Checkstyle的使用详解 CheckStyle是SourceForge下的一个项目,提供了一个帮助JAVA开发人员遵守某些编码规范的工具.它能够自动化代 ...

  7. Java-Runoob-高级教程-实例-方法:11. Java 实例 – enum 和 switch 语句使用

    ylbtech-Java-Runoob-高级教程-实例-方法:11. Java 实例 – enum 和 switch 语句使用 1.返回顶部 1. Java 实例 - enum 和 switch 语句 ...

  8. Java流程控制,for,switch,while.break,continue,return

    Java流程控制,for,switch,while.break,continue,return

  9. java 编程英语单词,语句

    记录一下java 编程工作学习中常用的英语汇总 in other words: 换句话说 dangle :悬挂 separated:分开的 distinct:明显的,独特的 actual :实际的 i ...

随机推荐

  1. Java中的WebService服务

    一.在本地发布一个webservice服务 1.使用jdk中的 javax.xml.ws.Endpoint 类的 static Endpointpublish(Stringaddress,Object ...

  2. 看我如何从一个APK到最终拿下域管理权限

    本文我将向大家介绍在企业网络中使用个人智能手机,会给我们企业网络造成怎样的潜在威胁?事实证明,想要欺骗一位企业内部的员工并让其安装恶意应用程序,其实并不困难.一旦成功,攻击者就可以突破企业内网的防护机 ...

  3. EverythingAboutJava

    1 GC gabage collection 垃圾回收Java GC系列(1):Java垃圾回收简介 http://mp.weixin.qq.com/s?src=3&timestamp=149 ...

  4. Thinkphp3.2———配置模块

    一.配置格式 Thinkphp框架中的所有配置都是数组形式定义的的格式为: //项目配置 return array( 'DEFAULT_MODULE'=>'Index',//默认模块 'URL_ ...

  5. Adaline网络识别印刷体数字0到9-java实现

    本篇只给出实现的代码,下一篇将讲一讲实现的原理,及其Adline网络中的LMS算法原理. 包含两个类: package com.cgjr.com; import java.security.Diges ...

  6. JavaScript ,Python,java,Go系列算法之选择排序

    常见的内部排序算法有:插入排序.希尔排序.选择排序.冒泡排序.归并排序.快速排序.堆排序.基数排序等. 用一张图概括:   选择排序 选择排序是一种简单直观的排序算法,无论什么数据进去都是O(n2) ...

  7. jQuery选择器的优点

    jQuery选择器的优点 相信小伙伴们对选择器并不陌生,从css1到css3的选择器有很多,但是JQuery都能完美的支持,而且API操作起来也特别方便好用,在很大程度上精简了代码,节约了很多性能.那 ...

  8. Unity C# 一些关于Camera的心得!

    本文原创,转载请注明出处:http://www.cnblogs.com/AdvancePikachu/p/6856374.html 首先,总结了下最近工作中关于摄像机漫游的功能, 脚本如下: Tran ...

  9. 9、JcomboBox下拉框事件监听

    9.JcomboBox下拉框事件监听 JComboBox()的事件监听类ItemListener.其范例代码如下: import java.awt.*; import java.awt.event.* ...

  10. [原创]Nexus5 内核编译烧录过程记录

    参考Android系统源代码情况分析第二章进行实践,为了提高效率,也为了增加实践机会,使用Nexus5进行内核编译.需要说明的是,Android源代码工程默认是不包含它所使用的Linux内核源码,如果 ...