Java (9)条件语句

141 阅读2分钟

「这是我参与11月更文挑战的第10天,活动详情查看:2021最后一次更文挑战

Java 条件语句

if-else 语句

Java 的 if 条件语句和 C 完全一致。

if (expression_0) {
    // statements
} else if (expression_1) {
    // statements
} else {
    // statements
}

这个代码无需解释

switch-case 语句

switch(expression){
    case value_0 :
       //语句
       break;   //可选
    case value_1 :
       //语句
       break;   //可选
    //你可以有任意数量的case语句
    default :   //可选
       //语句
}

Java 中的 switch 大体上和 C 的相同,但也有不同的地方。值得一提的是如下几点:

  • 同 C 一样,
    • case 语句中的值的数据类型必须与变量的数据类型相同,而且只能是常量或者字面常量。
    • 同时需要注意 case 后一直执行到 break 才会停止(或者执行到全部结束),不会在一个 case 结束后自动停止!
  • 与 C 不同的是,
    • Java 中 switch 后面的 expression 可以是 byteshortint 或者 char。从 Java SE 7 开始,switch 支持字符串 String 类型了。

(补充)设计模式

对于实际项目中的情况,我们可能有很多种分支,或者每一块的处理流程都复杂,无论用 if 还是 switch 都让代码非常冗长。这时可以考虑采用一些设计模式。

策略模式

我们可以考虑把需要的 if-else 分支的业务逻辑抽取为各种策略,就是把每个分支的处理语句提取出来封装成一个实现了某个 Strategy 接口的类。然后为了让调用者方便完成分支的选择,我们把策略的选择逻辑用一个简单工厂封装:

68747470733a2f2f747661312e73696e61696d672e636e2f6c617267652f30303753385a496c6c7931676a306d736c776f33626a333164713073633075672e6a7067.jpeg

这种方法其实还是要写一大堆 if-else 的,只是放到了工厂类里,对调用者透明了。

责任链模式

对于更复杂的问题,还可以考虑使用责任链模式,动态地分配处理责任。

这个模式很有意思,就是把一大堆各种分支的处理封装成类,组成一个链条。使用时,我们把选择的条件当作一个请求。请求在这个链上传递,直到链上的某一个对象决定处理这个请求。

例如,这是个分级打日志的责任链例子:

截屏2021-11-10 16.42.47.png

详见:www.runoob.com/design-patt…