switch和if-else的用法类似:

if(x == 3) {

}else if(x == 30) {

}else if(x == -6) {

}else {

}等同于switch的:

switch(x) {

case 3:

break;

case 30:

break;

case -6:

break;

default:

}

如果switch的case中不包含break,则即使运行了某个case中的代码,仍会检测其他case并一直运行到最后。

switch parameter的数据类型:

switch(int, short, byte, char, string){}

switch example: AgeCalculator.java

import javax.swing.JOptionPane;

import java.util.Calendar;

public class AgeCalculator {

private static int daysSince_01_01_1900(int month, int date, int year) {

int days = (int)((year - 1900) * 365.25);

switch(month) {

case 12:

days += 30;

case 11:

days += 31;

case 10:

days += 30;

case 9:

days += 31;

case 8:

days += 31;

case 7:

days += 30;

case 6:

days += 31;

case 5:

days += 30;

case 4:

days += 31;

case 3:

days += (year % 4 == 0)? 29 : 28;

case 2:

days += 31;

}

days += date;

return days;

}

public static void main(String[] args) {

String birthday = JOptionPane.showInputDialog("Enter your birthday (MM/DD/YYYY): ");

int birthMonth = Integer.parseInt(birthday.substring(0, 2));

int birthDay = Integer.parseInt(birthday.substring(3, 5));

int birthYear = Integer.parseInt(birthday.substring(6, 10));

Calendar calendar = Calendar.getInstance();

int todayMonth = calendar.get(Calendar.MONTH) + 1; // returns 0 for January!

int todayDay = calendar.get(Calendar.DAY_OF_MONTH);

int todayYear = calendar.get(Calendar.YEAR);

int todayDays = daysSince_01_01_1900(todayMonth, todayDay, todayYear);

int birthdayDays = daysSince_01_01_1900(birthMonth, birthDay, birthYear);

int ageDays = (todayDays - birthdayDays);

System.out.println("You are " + ageDays + " days old.");

System.out.println("That is " + ageDays * 24 * 60 * 60 + " seconds!");

}

}输入为:

02/27/1998

输出为:

You are 7244 days old.

That is 625881600 seconds!

switch中代码相同的case是可以归并的,类似于在if-else的Boolean中使用"||"。

example:

public class BetterSwitch {

public static void main(String[] args) {

String digitString = JOptionPane.showInputDialog("Enter a single digit.");

int digit = Integer.parseInt(digitString);

int mysteryValue = 0;

switch(digit) {

case 0:

case 4:

case 5:

case 9:

mysteryValue = 4;

break;

case 1:

case 2:

case 6:

mysteryValue = 3;

break;

case 3:

case 7:

case 8:

mysteryValue = 5;

break;

default:

throw new RuntimeException("Illegal Value: " + digit);

}

System.out.println("Mystery value is " + mysteryValue);

}

}以上代码就等同于:

import javax.swing.JOptionPane;

public class PlainSwitch {

public static void main(String[] args) {

String digitString = JOptionPane.showInputDialog("Enter a single digit.");

int digit = Integer.parseInt(digitString);

int mysteryValue = 0;

switch(digit) {

case 0:

mysteryValue = 4;

break;

case 1:

mysteryValue = 3;

break;

case 2:

mysteryValue = 3;

break;

case 3:

mysteryValue = 5;

break;

case 4:

mysteryValue = 4;

break;

case 5:

mysteryValue = 4;

break;

case 6:

mysteryValue = 3;

break;

case 7:

mysteryValue = 5;

break;

case 8:

mysteryValue = 5;

break;

case 9:

mysteryValue = 4;

default:

throw new RuntimeException("Illegal value: " + digit);

}

System.out.println("Mystery value is " + mysteryValue);

}

}

switch case穿透Java_Java switch的用法与case的穿透现象举例详解相关推荐

  1. design短语的用法总结_最新高中英语知识点详解之design的用法及常见短语

    英语的应用越来越广泛了,我们必须好好来学习英语知识.对此小学频道编辑为大家整理了最新高中英语知识点详解之design的用法及常见短语.详情如下: design的用法 n.设计;图案;构思 vt.设计; ...

  2. Redis缓存穿透、缓存击穿、缓存雪崩及其多种处理方式详解

    文章目录 一.缓存穿透(数据查不到) 1.概念 2.解决方案 (1)解决方案一:缓存空对象 (2)解决方案二:布隆过滤器 二.缓存击穿(访问量太大,缓存正好过期) 1.概述 2.解决方案 (1)解决方 ...

  3. php中fwrite函数的用法,fwrite函数介绍与使用方法详解

    以下正文:这篇文章主要介绍了PHP文件读写操作相关函数总结,本文总结了fwrite().fread().fgets().fgetc().file().readfile() 等函数的介绍及使用例子一.f ...

  4. c语言swatch的用法返回,Linux swatch系统监控程序命令详解

    swatch(simple watcher) 功能说明:系统监控程序. 语 法:swatch [-A ][-c ][-f ][-I ][-P ][-r ][-t ] 补充说明:swatch可用来监控系 ...

  5. java serializable用法_JAVA序列化Serializable及Externalizable区别详解

    序列化简介 Java 的对象序列化将那些实现 Serializable 接口的对象转换成一个字节序列,并能在之后将这个字节序列完全恢复为原来的对象. 这就意味着 Java 对象在网络上的传输可以不依赖 ...

  6. python中itertools的用法_python中的itertools的使用详解

    今天了解了下python中内置模块itertools的使用,熟悉下,看能不能以后少写几个for,嘿嘿

  7. java exception用法_Java基础回顾_Exception异常使用详解

    package 内部类异常包装器; public class 异常 { /** * 1.异常: * 有Error和Exception两个基本子类 * 2.Error: * Error表示恢复不是不可能 ...

  8. java file用法_Java File 类的使用方法详解(转)

    转自:http://www.codeceo.com/article/java-file-class.html Java File类的功能非常强大,利用Java基本上可以对文件进行所有的操作.本文将对J ...

  9. vue 中provide的用法_Vue多级组件provide/inject使用详解

    这次给大家带来Vue多级组件provide/inject使用详解,Vue多级组件provide/inject使用的注意事项有哪些,下面就是实战案例,一起来看一下. provide / inject 是 ...

最新文章

  1. 《不留》--王菲 Faye
  2. 模块加载过程代码分析1
  3. 微信公众平台开发书籍推荐
  4. PAT甲级题目翻译+答案 AcWing(进位制)
  5. 【转】从 ArcGIS for Desktop 发布地图服务
  6. [技术收藏]关于IOPS
  7. 常用的Linux的命令
  8. Struts2学习笔记(十) OGNL
  9. dos命令怎样进入计算机,怎么进DOS命令的方法
  10. Windows放大镜黑屏问题以及快捷键
  11. USBKEY全解析---概要介绍
  12. 使用 dva 如何配置异步加载路由组件
  13. 【欧拉计划第 1 题】3 或 5 的倍数 Multiples of 3 or 5
  14. jdk官网下载与安装
  15. 1024@程序员:图灵社区福利来了,请本人签收
  16. Enow ICQ上的自白
  17. 采用OKR框架如何使组织敏捷
  18. 【BLE MIDI】MIDI 文件格式分析 ( MIDI 轨道分析 | MIDI 轨道头 | MIDI 轨道长度 | delta-time 间隔 )
  19. )用计算机解决问题的基本过程是(,计算机解决问题基本过程 答案.doc
  20. 手机生产:第一天量产1台,接下来2天(即第二、三天)每天量产2件,接下来3天(即第四、五、六天)每天量产3件

热门文章

  1. vsftp pam mysql_实验记录:vsftp整合mysql-pam管理虚拟账号
  2. CMake-add_executable()
  3. 解决RHEL无法访问NTFS
  4. Azure Synapse Analytics简介第1部分:什么是Azure Synapse Analytics?
  5. HTTP错误500.30——ANCM进程内启动失败——.NET Core
  6. AI队列长度检测:使用Keras进行对象检测
  7. 使用Swagger,ApiExplorer和NSwag掌握ASP.NET Core和ABP中的外部Web API
  8. php返回json套数组_教你PHP怎么不用框架写优雅的中小网站
  9. spring security oauth2_SpringBoot2 整合OAuth2实现统一认证
  10. html编写气泡对话框,HTML+CSS入门 纯CSS手写圆角气泡对话框