Java条件语句

掌握

  • 掌握if语句语法
  • 掌握if…else语句语法
  • 掌握if…else if…else语句语法
  • 掌握switch case语句语法和原理

if语句

  • 语法
	if (布尔表达式) {
		代码块;
	}
  • 说明

    • 布尔表达式为true:执行代码块,执行结束后,程序继续向下执行
    • 布尔表达式为false:不执行代码块,程序直接向下执行
  • 示例:布尔表达式为true

public class Example {

    public static void main(String[] args) {

        if (true){
            
            System.out.println("执行代码块");
        }
        
        System.out.println("执行程序");
    }
}

执行结果:
执行代码块
执行程序

  • 示例:布尔表达式为false
public class Example {

    public static void main(String[] args) {

        if (false){

            System.out.println("执行代码块");
        }

        System.out.println("执行程序");
    }
}

执行结果:
执行程序

if…else语句

  • 语法
	if (布尔表达式) {
		代码块A;
	}else {
		代码块B;
	}
  • 说明

    • 布尔表达式为true:只执行代码块A,执行结束后,程序继续向下执行
    • 布尔表达式为false:只执行代码块B,执行结束后,程序继续向下执行
  • 示例:布尔表达式为true

public class Example {

    public static void main(String[] args) {

        if (true){

            System.out.println("执行代码块A");
        }else {

            System.out.println("执行代码块B");
        }

        System.out.println("执行程序");
    }
}

执行结果:
执行代码块A
执行程序

  • 示例:布尔表达式为false
public class Example {

    public static void main(String[] args) {

        if (false){

            System.out.println("执行代码块A");
        }else {

            System.out.println("执行代码块B");
        }

        System.out.println("执行程序");
    }
}

执行结果:
执行代码块B
执行程序

if…else if…else语句

  • 语法
	if (布尔表达式a) {
		代码块A;
	}else if (布尔表达式b) {
		代码块B;
	}else if (布尔表达式c) {
		代码块C;
	}else {
		代码块D;
	}
  • 说明

    • if开头,else结尾,中间else if可以有多个
    • 顺序判断布尔表达式,遇到true时,执行对应的代码块后结束整个语句,不再继续判断
    • 顺序判断布尔表达式,全部false时,执行else的代码块后结束整个语句
  • 示例:遇到true

public class Example {

    public static void main(String[] args) {

        if (false){

            System.out.println("执行代码块A");
        }else if (true){

            System.out.println("执行代码块B");
        }else if (true){

            System.out.println("执行代码块C");
        }else {

            System.out.println("执行代码块D");
        }

        System.out.println("执行程序");
    }
}

执行结果:
执行代码块B
执行程序

  • 示例:全部false
public class Example {

    public static void main(String[] args) {

        if (false){

            System.out.println("执行代码块A");
        }else if (false){

            System.out.println("执行代码块B");
        }else if (false){

            System.out.println("执行代码块C");
        }else {

            System.out.println("执行代码块D");
        }

        System.out.println("执行程序");
    }
}

执行结果:
执行代码块D
执行程序

switch case语句

  • 语法
	switch (变量) {
		case 变量值 :
			语句;
			break;
		case 变量值 :
			语句;
			break;
		default :
			语句;
	}
  • 说明

    • switch()接收变量,目前支持类型:byte,short,char,int,Byte,Short,Character,Integer,Enum,String
    • case的数量不限
    • case的变量值必须是不同的字面常量或者常量
    • case的变量值的数据类型与变量的数据类型相同
    • break跟随case,非必须
    • break为case匹配成功后跳出switch语句的标识
    • default为默认分支,非必须
    • 顺序匹配case,全部失败,default存在则执行default语句,default不存在则结束switch语句
    • 顺序匹配case,遇到成功,则从当前case开始顺序执行后续语句,后面存在break则执行到break处结束switch语句,后面不存在break则执行后续全部语句,包括default语句
  • 示例:case全部失败,default存在(不存在略)

public class Example {

    final static int X = 2;

    public static void main(String[] args) {

        int x = 10;

        switch (x){
            case 1 ://字面常量
                
                System.out.println("1分支");
            case X ://常量
                
                System.out.println("2分支");
            case 3 ://字面常量
                
                System.out.println("3分支");
            default :
                
                System.out.println("default分支");
        }
    }
}

执行结果:
default分支

  • 示例:case遇到成功,break存在
public class Example {

    final static int X = 2;

    public static void main(String[] args) {

        int x = 1;

        switch (x){
            case 1 ://字面常量

                System.out.println("1分支");
            case X ://常量

                System.out.println("2分支");

                break;
            case 3 ://字面常量

                System.out.println("3分支");
            default :

                System.out.println("default分支");
        }
    }
}

执行结果:
1分支
2分支

  • 示例:case遇到成功,break不存在
public class Example {

    final static int X = 2;

    public static void main(String[] args) {

        int x = 1;

        switch (x){
            case 1 ://字面常量

                System.out.println("1分支");
            case X ://常量

                System.out.println("2分支");
            case 3 ://字面常量

                System.out.println("3分支");
            default :

                System.out.println("default分支");
        }
    }
}

执行结果:
1分支
2分支
3分支
default分支

switch case拓展

  • 底层原理
    • switch语句底层通过数组实现,通常把这个数组叫做跳转表
    • 数组长度规则:case最大值-case最小值+1
    • 数组元素规则:每个case会执行的代码段地址(代码段依据break的位置来搜集)
    • 选取元素规则:入参变量值-case最小值=index,通过index在数组中选取元素(不能选取时返回default代码段地址)
    • 示例
	public class Example {
	
	    public static void main(String[] args) {
	
	        int x = 1;
	
	        switch (x){
	            case 5 :
	
	                System.out.println("代码段5");
	
	                break;
	            case 3 :
	
	                System.out.println("代码段3");
	            case 2 :
	
	                System.out.println("代码段2");
	                break;
	            case 1 :
	
	                System.out.println("代码段1");
	            default :
	
	                System.out.println("default代码段");
	        }
	    }
	
	    /**
	     * 解析
	     * 根据数组长度规则和数组元素规则解析整个switch语句得到数组
	     * arr = [代码段1+default代码段, 代码段2, 代码段3+代码段2, default代码段, 代码段5]
	     * arr[0]对应case1,存放代码段1和default代码段
	     * arr[1]对应case2,存放代码段2
	     * arr[2]对应case3,存放代码段3和代码段2
	     * arr[3]无对应case,存放default代码段
	     * arr[4]对应case5,存放代码段5
	     * 根据元素选取规则,选取要执行的代码段地址,arr[x - 1] = arr[0],则要执行的代码段为代码段1和default代码段
	     */
	}

执行结果:
代码段1
default代码段

  • 如何支持String类型

    • switch核心逻辑不变
    • 增加String类型的处理逻辑,将String转换为hash值,将hash值代入switch核心逻辑
  • 如何支持Enum类型

    • switch核心逻辑不变
    • 增加Enum类型的处理逻辑,将Enum转换为数组,为每个属性分配索引,将索引值代入switch核心逻辑
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值