01-流程控制

01-流程控制,第1张

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 list = new ArrayList<>();
        list.add("test");
        list.forEach(item -> {
            System.out.println(item);
        });
    }

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

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

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

public static void main(String[] args) {
        List 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");
        
    }
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则通常作为兜底结果,虽然不加没问题,但是实际编程中最好还是加上,防止出现意料之后的结果,但是又不知道走到了什么逻辑分支。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5660426.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存