先看一段代码:

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之戳中痛点 - (5)switch语句break不能忘以及default不同位置的用法的更多相关文章

  1. 提高java编程质量 - (五)switch语句break不能忘以及default不同位置的用法

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

  2. Java之戳中痛点 - (4)i++ 和 ++i 探究原理

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

  3. Java之戳中痛点 - (7)善用Java整型缓存池

    先看一段代码: package com.test; import java.util.Scanner; public class IntegerCache { public static void m ...

  4. Java之戳中痛点 - (6)避免类型自动转换,例如两个整数相除得浮点数遇坑

    先来看一个例子: package com.test; public class calculate { /** * 光速30万公里/秒 */ public static final int LIGHT ...

  5. Java之戳中痛点 - (1)易变业务使用脚本语言编写

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

  6. Java之戳中痛点 - (8)synchronized深度解析

    概览: 简介:作用.地位.不控制并发的影响 用法:对象锁和类锁 多线程访问同步方法的7种情况 性质:可重入.不可中断 原理:加解锁原理.可重入原理.可见性原理 缺陷:效率低.不够灵活.无法预判是否成功 ...

  7. Java之戳中痛点 - (2)取余用偶判断,不要用奇判断

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

  8. Java之戳中痛点 - (3)三目运算符的两个操作数类型尽量一致

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

  9. Java基础学习中一些词语和语句的使用

    在Java基础学习中,我们刚接触Java会遇到一些词和语句的使用不清的情况,不能很清楚的理解它的运行效果会是怎么样的,如:break,continue在程序中运行效果及跳转位置, 1.先来看看brea ...

随机推荐

  1. Create Fiori List App Report with ABAP CDS view – PART 2

    In the Part 1 blog, we have discussed below topics CDS annotations for Fiori List Report. How to cre ...

  2. linux ln 建立软链接-- 基于dubbo-zookeeper服务的 服务jar 引用公共的 lib

    对于ln命令网上有很多的教程,这里不再复述, 其基本目的是:多个文件夹公用一个文件夹的里的文件. 其基本命令格式: ln [option] source_file dist_file (source_ ...

  3. leetcode笔记--6 Add Digits

    question: Given a non-negative integer num, repeatedly add all its digits until the result has only ...

  4. 【个人训练】(POJ1276)Cash Machine

    最近的很多题解应该都是dp相关的了,emmm因为dp对我而言思考难度比较大,那么为了理顺自己的思路当然只能通过写blog整理了.愿我能成功搞定dp这个大关!(至少中等难度的dp要能够解决啊o(TヘTo ...

  5. 第七篇Python基本数据类型之数字&字符串&布尔值

    数字 写在最前,必须要会的:int() 整型 Python3里无论数字多长都用int表示,Python2里有int和Long表示,Long表示长整型 有关数字的常用方法,方法调用后面都必须带括号() ...

  6. TP5 急速上手 语法规则

    Tp5  规则 命名规范 目录和文件名采用‘小写+下划线’,并且以小写字母开头: 类库.函数文件统一以.php为后缀: 类的文件名均以命名空间定义,并且命名空间的路径和类库文件所在路径一致(包括大小写 ...

  7. 《python机器学习—预测分析核心算法》:构建预测模型的一般流程

    参见原书1.5节 构建预测模型的一般流程 问题的日常语言表述->问题的数学语言重述重述问题.提取特征.训练算法.评估算法 熟悉不同算法的输入数据结构:1.提取或组合预测所需的特征2.设定训练目标 ...

  8. COJ 2192: Wells弹键盘 (dp)

    2192: Wells弹键盘 Description Wells十分羡慕和佩服那些会弹钢琴的人比如子浩君,然而Wells只会弹键盘…… Wells的键盘只有10个键,从1,2,3,……,9,0,如下图 ...

  9. pep8介绍

    pep8介绍: PEP8是针对python代码格式而编订的风格指南,采用一致的编码风格可以令代码更加易懂易读! (1)空白: python中空白会影响代码的含义及其代码的清晰程度 使用space(空格 ...

  10. java获得采集网页内容的方法小结

          为了写一个java的采集程序,从网上学习到3种方法可以获取单个网页内容的方法,主要是运用到是java IO流方面的知识,对其不熟悉,因此写个小结. import java.io.Buffe ...