java选择语句

Java 选择结构深度解析


一、if 结构体系

1. 单条件判断

// 基础if结构
int score = 85;
if (score >= 60) {
    System.out.println("考试通过");
}

// 判断空值(防御性编程)
String text = null;
if (text != null && !text.isEmpty()) {
    System.out.println(text.length());
}

执行流程

true
false
条件判断
执行代码块
跳过代码块

二、if-else 分支结构

1. 双分支判断

// 温度控制系统
double temperature = 28.5;
if (temperature > 30) {
    System.out.println("开启空调");
} else {
    System.out.println("关闭空调");
}

// 字符串非空判断
String input = "";
if (input.isEmpty()) {
    System.out.println("输入不能为空");
} else {
    System.out.println("输入有效");
}

2. 多条件链式判断

// 成绩评级系统
int grade = 78;
if (grade >= 90) {
    System.out.println("A");
} else if (grade >= 80) {
    System.out.println("B");
} else if (grade >= 70) {
    System.out.println("C");
} else {
    System.out.println("D");
}

企业级规范建议
• 当条件超过3层时,优先考虑 switch 或策略模式
• 使用卫语句减少嵌套深度


三、switch 多路分支

1. 传统语法(JDK5+)

// 星期判断系统
int day = 3;
switch (day) {
    case 1:
        System.out.println("星期一");
        break;
    case 2:
        System.out.println("星期二");
        break;
    case 3:
        System.out.println("星期三");
        break;
    default:
        System.out.println("无效日期");
}

// 穿透特性案例(谨慎使用)
char grade = 'B';
switch (grade) {
    case 'A':
    case 'B':
        System.out.println("优秀");
        break;
    case 'C':
        System.out.println("合格");
        break;
    default:
        System.out.println("需努力");
}

常见陷阱

// 缺少break导致穿透
int num = 2;
switch (num) {
    case 1:
        System.out.println("一");
    case 2:
        System.out.println("二"); // 会继续执行后续case
    case 3:
        System.out.println("三");
}
// 输出:二 三

2. 增强型语法(JDK12+)

// 箭头语法(自动阻断穿透)
String season = switch (month) {
    case 12, 1, 2 -> "冬季";
    case 3, 4, 5 -> "春季";
    case 6, 7, 8 -> "夏季";
    case 9, 10, 11 -> "秋季";
    default -> "无效月份";
};

// 带返回值的switch表达式
int days = switch (month) {
    case 1, 3, 5, 7, 8, 10, 12 -> 31;
    case 4, 6, 9, 11 -> 30;
    case 2 -> {
        if (isLeapYear) yield 29;
        else yield 28;
    }
    default -> throw new IllegalArgumentException();
};

版本对比

特性传统switch增强型switch
返回值不支持支持
语法简洁性
穿透控制需手动break自动阻断
多值匹配case堆叠逗号分隔

四、特殊场景处理

1. 浮点数比较

// 错误方式
double a = 0.1 + 0.2;
if (a == 0.3) {
    System.out.println("相等"); // 不会执行
}

// 正确方式
if (Math.abs(a - 0.3) < 1e-6) {
    System.out.println("有效相等");
}

2. 对象比较

// 字符串比较陷阱
String s1 = "hello";
String s2 = new String("hello");
if (s1 == s2) { // false
    System.out.println("相同对象");
}
if (s1.equals(s2)) { // true
    System.out.println("内容相同");
}

五、企业级最佳实践

1. 代码规范建议

// 卫语句示例
public void processOrder(Order order) {
    if (order == null) return;
    if (order.isCanceled()) return;
    
    // 核心业务逻辑
}

// 圈复杂度控制
if (conditionCount > 3) {
    // 改用策略模式或状态模式
}

2. 性能优化指南

场景推荐方案时间复杂度
离散值(<5个)if-else链O(n)
连续整型值(>3个)switchO(1)
动态条件判断哈希表查询O(1)

通过深入理解选择结构的特性和应用场景,结合现代Java语法,可以编写出既高效又易维护的条件逻辑代码。建议在开发中:

  1. 优先使用增强型switch语法
  2. 复杂条件判断引入设计模式
  3. 定期使用代码质量分析工具检查条件复杂度
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值