switch的一点用法

public Instrument next(){
switch(rand.nextInt(5)){
default:
case 0:return new Wind();
case 1:return new Percussion();
case 2:return new Stringed();
case 3:return new Brass();
case 4:return new Woodwind();
}

}

如果把default去掉,方法会报出 无返回值的错误 源于thing in java的练习题,真的是一个奇怪的用法

<think> 我们正在讨论BigDecimal的用法,但用户突然切换话题询问Javaswitch case语句的用法。因此,我们需要切换上下文,为用户提供关于switch case的详细说明。 注意:用户之前的问题是关于BigDecimal的,但当前问题明确要求获取switch case的用法。因此,我们应该忽略之前关于BigDecimal的讨论,专注于当前问题。 同时,注意用户提供的引用[1]是关于switch-case用法的,其中提到了一个关键点:如果没有break,则会继续执行后面的case直到遇到break或结束。我们可以引用这个内容。 根据要求,我们需要: 1. 使用中文回答。 2. 结构化回答,清晰明了。 3. 在引用处添加引用标识。 4. 生成相关问题。 回答结构建议: 一、基本语法 二、执行流程(重点讲解break的作用) 三、注意事项 四、Java 12+新特性(switch表达式) 五、示例代码 六、相关问题 注意:用户引用[1]中提到了一个测试案例:case和default中没有break,会导致继续执行后面的代码。这一点要重点强调。 </think> ### Java switch case 用法详解 #### 一、基本语法结构 ```java switch (expression) { case value1: // 代码块1 break; case value2: // 代码块2 break; default: // 默认代码块 } ``` - **expression**:支持类型(Java 17+): - 整型:`byte`, `short`, `int`, `char` - 字符串:`String`(Java 7+) - 枚举类型 - 包装类:`Byte`, `Short`, `Integer`, `Character` - **case**:匹配的具体值,必须为常量表达式 - **default**:当无匹配case时执行(可选) #### 二、执行流程与注意事项 1. **穿透现象(Fall-through)**: ```java int day = 2; switch (day) { case 1: System.out.println("周一"); // 无break → 穿透 case 2: System.out.println("周二"); // 输出"周二" // 无break → 继续穿透 default: System.out.println("周末"); // 输出"周末" } ``` > 输出结果: > ``` > 周二 > 周末 > ``` 缺少`break`会导致执行后续所有case/default块[^1] 2. **必须使用`break`终止**: ```java switch (color) { case "RED": setAlert(); break; // 终止switch case "GREEN": allowAccess(); break; } ``` #### 三、Java 12+ 新特性 1. **箭头语法(Lambda风格)**: ```java switch (fruit) { case "APPLE" -> System.out.println("苹果"); case "ORANGE" -> { System.out.println("橘子"); logFruitCount(); // 多语句需用{} } default -> System.out.println("未知水果"); } ``` > 箭头语法自动阻断穿透,无需`break` 2. **返回值表达式**: ```java String taste = switch (fruit) { case "LEMON" -> "酸"; case "MANGO" -> "甜"; default -> "未知"; }; // 注意分号结尾 ``` #### 四、枚举类型最佳实践 ```java enum Status { RUNNING, STOPPED, PAUSED } Status s = Status.RUNNING; switch (s) { case RUNNING: // 直接使用枚举值 startEngine(); break; case STOPPED: shutdown(); break; } ``` #### 五、常见错误规避 1. **case值重复**: ```java switch (x) { case 1: ... case 1: ... // 编译错误:重复case } ``` 2. **类型不匹配**: ```java String s = "text"; switch (s) { case 10: ... // 错误:int与String不兼容 } ``` 3. **Null值处理**: ```java String input = null; switch (input) { // 抛出NullPointerException case "A": ... } ``` > **关键原则**: > - 始终用`break`阻断穿透(除非刻意利用穿透) > - 优先使用Java 12+箭头语法 > - 对`null`进行显式检查 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值