01-流程控制

if…else

public class LeapYear {
    public static void main(String[] args) {
        int year = 2021;
        // 如果一个年份能被4整除,并且不能被100整除则是闰年
        if (year % 4 == 0 && year % 100 != 0) {
            System.out.println(year + "是闰年");
        } else {
            System.out.println(year + "不是闰年");
        }
    }
}

短路现象

所谓的短路现象其实就是指上面代码中 "year % 4 == 0 && year % 100 != 0"这一句中的 && ,如果前面的结果是false,那么后面的表达式就不会再执行了,因为前面已经是false了,后面的结果是true或者是false都无法改变整个表达式的结果,所以后面的就无需再执行了。
为什么要注意短路现象呢?
因为如果你意图在后面的表达式做一些逻辑运算,就可能因为短路现象而得不到执行,最终导致结果可能出乎意料。所以我们必须要了解这个问题,并进行规避。(不要在这种判断的表达式中进行逻辑运算

do…while,while…do,for循环

其实这个也没啥特别需要说的,需要注意的就是do…while会先把循环体先执行一次,然后再进行条件判断,而while…do则是先判断,判定为true才会执行一次循环体。
for循环现在有更进一步简化的表达,例如 for item:items ,或者是:

public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("test");
        list.forEach(item -> {
            System.out.println(item);
        });
    }

但需要注意,在使用以上for循环形式遍历对象列表时,需要先进行判空,否则会产生空指针异常。
另一个我们需要关注的问题就是如果跳出循环体流程,除了循环体外面的判断,我们经常也需要在循环体内部中断代码执行,一般分为两种情况:

  • 跳出当前次的循环:那么我们就使用continue,这样就会执行下次轮回。
  • 直接跳出整个循环体:那么我们可以使用return,这样就会跳出整个循环体,返回主流程。

但需要额外注意,forEach循环是无法直接退出整个循环的:

public static void main(String[] args) {
        List<String> loopTest = new ArrayList<>();
        loopTest.add("loop1");
        loopTest.add("loop2");
        loopTest.add("loop3");
        // 要考虑好场景再使用下面的循环方式
        loopTest.forEach(item -> {
            System.out.println(item);
            return ;
        });
        System.out.println("loop end");
        /**
         * 实际输出:
         * loop1
         * loop2
         * loop3
         * loop end
         */
    }

switch&break&default

switch一般在仅有固定几个分支的时候使用,也就是使用在简单的逻辑分支场景下,所以它一般只支持byte, short , char, int,但是在jdk7之后,它就支持了String,但实际上switch中的值都是转换为整型之后进行比较的。当使用的对象是char时,使用对应的ascii码,而String对象则是使用对应的hashCode。
当我们使用switch时,必须要注意的它什么时候中断流程,当switch匹配了值之后,并不会立刻返回的,而是需要再遇到一个break,然后才中断返回结果的。如果你忘记在流程中加入break,就可能导致代码的结果出乎意料。
例如:

public static void main(String[] args) {
    char grade = 'A';
    switch (grade) {
        case 'A':
            System.out.println("Your grade is A");
        case 'B':
            System.out.println("Your grade is B");
            break;
        case 'C':
            System.out.println("Your grade is C");
            break;
        default:
            System.out.println("Your are fail");
    }
}

你的期望结果是输出:

Your grade is A

但是实际的输出结果确实:

Your grade is A
Your grade is B

而default则通常作为兜底结果,虽然不加没问题,但是实际编程中最好还是加上,防止出现意料之后的结果,但是又不知道走到了什么逻辑分支。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值