在switch语句中,throw后是否需加break?Option2方案是否可行?
在switch case语句中,throw之后是否应该添加break?
首先明确结论:Option2是完全可接受且正确的解决方案。
核心原因:
throw语句会立即终止当前代码的执行流程,程序会直接跳转到最近的异常捕获(catch)逻辑中,因此throw之后的任何代码(比如Option1里的break)都属于不可达代码。
像Java、C#这类强类型编程语言,编译器会严格检查不可达代码,并将其判定为编译错误——这也是你提到Option1会产生编译错误的原因。
两个选项对比:
Option1:
switch(value){ case 1: case 2: case 3: throw APException(); break; default: break; }这里的
break永远不会被执行,属于无效代码,必然触发编译错误,完全不可用。Option2:
switch(value){ case 1: case 2: case 3: throw APException(); default: break; }这段代码逻辑清晰、编译正常:当
value匹配1/2/3时,抛出异常直接中断switch流程;default分支正常执行break结束switch,不存在任何问题。
另外补充:throw本身就起到了终止当前case执行的作用,不需要额外用break来防止case穿透——因为异常抛出后,后续的case分支根本不会有机会执行。
内容的提问来源于stack exchange,提问作者João Ferrão
相关产品推荐
相关产品推荐

