Java的控制流语句详解

Java的控制流语句详解



前言

控制流语句决定了代码的执行顺序和逻辑,是程序能够按照我们的意图运行的关键。本文将详细解析Java中的控制流语句,帮助读者更好地理解和应用这些语句。

主要内容包括:顺序结构选择结构循环结构跳转语句


一、顺序结构

顺序结构是程序中最简单、最基本的流程控制。在Java中,顺序结构就是按照代码的先后顺序,依次执行每一条语句。这是程序执行的基本规则,也是我们编写代码时默认的执行方式。没有特定的语法结构,只需要按照代码的书写顺序进行即可。

二、选择结构

选择结构也被称为分支结构,它根据条件的真假来执行不同的代码块。Java中的选择结构主要通过if语句、if…else if…else语句和switch语句来实现。

1. if语句:用于判断一个条件是否为真,如果为真则执行相应的代码块。

语法示例:

//condition为真时,执行代码块
if (condition) {  
    // 执行代码块  
}

2. if…else if…else语句:用于在条件为真时执行一段代码,否则执行另一段代码。

语法示例:

// 条件为真时执行对应的代码块  
if (condition1) {  
    // 执行代码块1  
} else if (condition2) {  
    // 执行代码块2  
} else if (condition3) {  
    // 执行代码块3  
} else {  
    // 执行代码块4(如果所有条件都不满足)  
}

// else if 可以去掉直接使用if...else...
if (condition) {  
    // 条件为真时执行的代码块  
} else {  
    // 条件为假时执行的代码块  
}

代码示例:

import java.util.Scanner;  
  
public class AgeExample {  
    public static void main(String[] args) {  
        Scanner scanner = new Scanner(System.in);  
        System.out.print("请输入您的年龄:");  
        int age = scanner.nextInt();  
  
        if (age < 0) {  
            System.out.println("年龄不能是负数,请重新输入。");  
        } else if (age < 18) {  
            System.out.println("您还未成年。");  
        } else if (age >= 18 && age < 65) {  
            System.out.println("您是成年人。");  
        } else {  
            System.out.println("您已步入老年。");  
        }  
  
        scanner.close();  
    }  
}

在这个例子中,程序首先提示用户输入年龄,然后根据输入的年龄值来判断并输出相应的消息。如果年龄小于0,程序会输出一个错误消息;如果年龄在0到18岁之间,程序会输出未成年消息;如果年龄在18岁到65岁之间,程序会输出成年消息;如果年龄大于或等于65岁,程序会输出老年消息。

注意,else if 和 else 块是可选的,你可以根据实际需要添加任意数量的 else if 块,或者只使用 if 和 else 块。此外,else 块也是可选的,如果你不想处理所有条件都不满足的情况,可以省略它。

3. switch语句:用于根据表达式的值选择执行不同的代码块。

switch 语句在 Java 中用于基于不同的情况执行不同的代码块。它根据表达式的值匹配 case 标签,并执行与该标签关联的代码。如果没有 case 与表达式的值匹配,且存在 default 标签,则会执行 default 下的代码。

语法示例:

switch (variable) {  
    case value1:  
        // 执行代码块1  
        break;  
    case value2:  
        // 执行代码块2  
        break;  
    default:  
        // 默认执行的代码块  
}

代码示例:

public class SwitchStatementExample {  
    public static void main(String[] args) {  
        // 定义一个变量  
        int day = 3;  
  
        // 使用 switch 语句根据 day 的值执行不同的代码块  
        switch (day) {  
            case 1:  
                System.out.println("今天是星期一");  
                break;  
            case 2:  
                System.out.println("今天是星期二");  
                break;  
            case 3:  
                System.out.println("今天是星期三");  
                break;  
            case 4:  
                System.out.println("今天是星期四");  
                break;  
            case 5:  
                System.out.println("今天是星期五");  
                break;  
            case 6:  
                System.out.println("今天是星期六");  
                break;  
            case 7:  
            case 8:
                System.out.println("今天是星期天");
                break;  
            default:  
                System.out.println("无效的日期");  
        }  
    }  
}

在上面的示例中,我们定义了一个名为 day 的变量,并将其值设置为3(代表星期三)。然后,我们使用 switch 语句根据 day 的值来输出不同的消息。每个 case 标签对应一个可能的 day 值,并且与每个 case 标签关联的代码块在匹配时会被执行。break 语句用于确保程序在执行完一个 case 代码块后跳出 switch 语句,而不是继续执行下一个 case 代码块(这被称为“贯穿”,在没有 break 时会发生)。如果 day 的值不是1到7之间的任何一个数字,default 标签下的代码将被执行。

且为了演示特殊情况,这边多列了一个数字8,7跟8之间因为没有break,所以输入7和输入8,程序的结果是一样的,都是输出"今天是星期天",所以需要注意:switch一般是需要跟break进行搭配使用的


三、循环结构

循环结构用于重复执行一段代码,直到满足特定的条件为止。Java中的循环结构主要有for循环while循环do…while循环,循环结构一定要有一个满足中断循环的条件,否则会成为死循环导致程序。

1. for循环:用于在指定次数内重复执行代码块。

只有当满足某个条件时才会执行代码块。

语法示例:指定次数->count

// int i = 0 相当于定义一个为i的局部变量,只在这个for循环中生效
// i<count 就是一个判断语句,只要i小于count就会一直执行代码块
// i++ 是每执行一次遍历,i就加1,只有这样子循环才会终结,否则就是一个死循环
for (int i = 0; i < count; i++) {  
    // 执行代码块  
}

代码示例:

public class ForLoopExample {  
    public static void main(String[] args) {  
        // 定义一个数组  
        int[] numbers = {1, 2, 3, 4, 5};  
  
        // 使用for循环遍历数组并打印每个元素  
        for (int i = 0; i < numbers.length; i++) {  
            System.out.println(numbers[i]);  
        }  
    }  
}

2.while循环:当满足某个条件时,重复执行代码块。

只有当满足某个条件时才会执行代码块,跟for循环一样

语法示例:指定条件->condition

while (condition) {  
    // 执行代码块  
}

代码示例:

public class WhileLoopExample {  
    public static void main(String[] args) {  
        // 初始化一个变量  
        int count = 0;  
  
        // 使用while循环,当count小于5时执行循环体  
        while (count < 5) {  
            System.out.println("Count is: " + count);  
            count++; // 增加计数器的值  
        }  
    }  
}

3.do…while循环:至少执行一次代码块,然后检查条件,如果条件为真,则继续执行。

至少会执行代码块一次。

语法示例:指定条件->condition

do {  
    // 执行代码块  
} while (condition);

代码示例:

public class DoWhileLoopExample {  
    public static void main(String[] args) {  
        // 初始化一个变量  
        int count = 5;  
  
        // 使用do...while循环,即使条件一开始就不满足,循环体也会执行至少一次  
        do {  
            System.out.println("Count is: " + count);  
            count--; // 减少计数器的值  
        } while (count > 0); // 检查条件,如果满足则继续循环  
    }  
}

4. 常用的两个循环解析(区别和使用场景):

  1. 使用场景:for循环更适用于循环次数已知的情况,比如遍历数组或固定次数的操作。而while循环则更适合于循环次数未知的情况,特别是在需要根据特定条件重复执行某段代码时。
  2. 循环的结构:for循环具有固定的三个部分:初始化、循环条件和循环增量。它的表达式通常为for(单次表达式;条件表达式;末尾循环体){中间循环体;}。而while循环只有一个循环条件部分,其表达式为while(表达式){循环体}。
  3. 执行条件的判断方式:for循环在执行末尾循环体后会再次进行条件判断,如果条件仍然成立,则继续重复循环,直到条件不成立时跳出循环。而while循环在满足条件时进入循环,当条件不满足时,执行完循环体内全部语句后再跳出循环。
  4. 循环体的执行顺序:在for循环中,循环变量在循环体内部进行修改,并且在循环体结束后再次更新循环变量。而while循环的循环变量通常在循环体外部进行修改,因此循环体内必须手动更新循环变量。

四、跳转语句

跳转语句用于改变程序的正常执行流程,包括break语句continue语句return语句

1. break语句:用于跳出循环或switch语句。

代码示例:

  1. 跳出循环
public class BreakStatementExample {  
    public static void main(String[] args) {  
        for (int i = 0; i < 10; i++) {  
            if (i == 5) {  
                break; // 当i等于5时,跳出循环  
            }  
            System.out.println("i is: " + i);  
        }  
        System.out.println("Loop finished.");  
    }  
}

在这个例子中,当i等于5时,break语句会被执行,从而终止for循环。因此,只会打印出i从0到4的值。

  1. 跳出switch语句的略

2. continue语句:用于跳过当前循环的剩余部分,进入下一次循环。

代码示例:

public class ContinueStatementExample {  
    public static void main(String[] args) {  
        for (int i = 0; i < 10; i++) {  
            if (i == 5) {  
                continue; // 当i等于5时,跳过本次循环的剩余部分  
            }  
            System.out.println("i is: " + i);  
        }  
        System.out.println("Loop finished.");  
    }  
}

在这个例子中,当i等于5时,continue语句会被执行。因此,i等于5的情况不会被打印出来,而是直接开始下一次循环迭代。

3. return语句:用于从方法中返回一个值,并结束方法的执行。

return可以无返回值,也可以返回基本数据类型或者对象

代码示例:

public class ReturnExample {  
    public static void main(String[] args) {  
    	printHello();
    	
        int result = add(5, 3);  
        System.out.println("The sum is: " + result);  
    }  
  
  	// 返回基本数据类型
    public static int add(int a, int b) {  
        int sum = a + b;  
        return sum; // 返回两个整数的和  
    }  
    
    // 无返回值
	public static void printHello() {  
        System.out.println("Hello, World!");  
        return; // 在void方法中,return语句是可选的,通常用于提前退出方法  
    } 
}

4. 注意

break和continue只能用在循环或switch语句中。如果尝试在其他上下文中使用它们,编译器会报错。此外,break和continue语句的使用应当谨慎,因为它们会改变代码的正常执行流程,可能导致代码难以理解和维护。

  • 24
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
000000_【课程介绍 —— 写在前面的话】_Java学习概述笔记.pdf 010101_【第1章:JAVA概述及开发环境搭建】_JAVA发展概述笔记.pdf 010102_【第1章:JAVA概述及开发环境搭建】_Java开发环境搭建笔记.pdf 010201_【第2章:简单Java程序】_简单Java程序笔记.pdf 010301_【第3章:Java基础程序设计】_Java数据类型笔记.pdf 010302_【第3章:Java基础程序设计】_运算符、表达式与语句笔记.pdf 010303_【第3章:Java基础程序设计】_判断与循环语句笔记.pdf 010401_【第4章:数组与方法】_数组的定义及使用笔记.pdf 010402_【第4章:数组与方法】_方法的声明及使用笔记.pdf 010403_【第4章:数组与方法】_数组的引用传递笔记.pdf 010404_【第4章:数组与方法】_Java新特性对数组的支持笔记.pdf 020501_【第5章:面向对象基础】_面向对象、类与对象的定义笔记.pdf 020502_【第5章:面向对象基础】_类与对象的进一步研究笔记.pdf 020503_【第5章:面向对象基础】_封装性笔记.pdf 020504_【第5章:面向对象基础】_构造方法与匿名对象笔记.pdf 020505_〖第5章:面向对象基础〗_实例讲解—类设计分析(学生类)笔记.pdf 020506_【第5章:面向对象基础】_String类笔记.pdf 020507_【第5章:面向对象基础】_String类的常用方法.pdf 020508_【第5章:面向对象基础】_引用传递及其应用笔记.pdf 020509_【第5章:面向对象基础】_this关键字笔记.pdf 020510_【第5章:面向对象基础】_static关键字笔记.pdf 020511_【第5章:面向对象基础】_理解main方法笔记.pdf 020512_【第5章:面向对象基础】_代码块笔记.pdf 020513_【第5章:面向对象基础】_构造方法私有化笔记.pdf 020514_【第5章:面向对象基础】_对象数组笔记.pdf 020515_【第5章:面向对象基础】_内部类笔记.pdf 020516_〖第5章:面向对象基础〗_实例讲解—系统登陆笔记.pdf 020517_〖第5章:面向对象基础〗_实例讲解—单向链表(1)笔记.pdf 020518_〖第5章:面向对象基础〗_实例讲解—单向链表(2)笔记.pdf 020601_【第6章:面向对象(高级)】_继承的基本实现笔记.pdf 020602_【第6章:面向对象(高级)】_继承的进一步研究笔记.pdf 020603_〖第6章:面向对象(高级)〗_范例:继承的应用笔记.pdf 020604_【第6章:面向对象(高级)】_final关键字笔记.pdf 020605_【第6章:面向对象(高级)】_抽象类的基本概念笔记.pdf 020606_【第6章:面向对象(高级)】_接口的基本概念笔记.pdf 020607_【第6章:面向对象(高级)】_对象的多态性笔记.pdf 020608_【第6章:面向对象(高级)】_instanceof关键字笔记.pdf 020609_【第6章:面向对象(高级)】_抽象类与接口的应用笔记.pdf 020610_〖第6章:面向对象(高级)〗_实例分析:宠物商店笔记.pdf 020611_【第6章:面向对象(高级)】_Object类笔记.pdf 020612_【第6章:面向对象(高级)】_包装类笔记.pdf 020613_【第6章:面向对象(高级)】_匿名内部类笔记.pdf 020701_【第7章:异常的基本概念】_异常的基本概念笔记.pdf 020702_【第7章:异常的基本概念】_异常的其他概念笔记.pdf 020801_【第8章:包及访问控制权限】_包的定义及导入笔记.pdf 020802_【第8章:包及访问控制权限】_访问控制权限及命名规范笔记.pdf 030901_【第9章:多线程】_认识多线程笔记.pdf 030902_【第9章:多线程】_线程常用操作方法笔记.pdf 030903_〖第9章:多线程〗_线程操作范例笔记.pdf 030904_【第9章:多线程】_同步与死锁笔记.pdf 030905_【第9章:多线程】_线程操作案例——生产者和消费者笔记.pdf 030906_【第9章:多线程】_线程生命周期笔记.pdf 031001_【第10章:泛型】_泛型入门笔记.pdf 031002_【第10章:泛型】_通配符笔记.pdf 031003_【第10章:泛型】_泛型的其他应用笔记.pdf 031004_〖第10章:泛型〗_实例讲解—泛型操作范例笔记.pdf 031101_【第11章:Java常用类库】_StringBuffer笔记.pdf 031102_【第11章:Java常用类库】_Runtime类笔记.pdf 031103_【第11章:Java常用类库】_国际化程序笔记.pdf 031104_【第11章:Java常用类库】_System类笔记.pdf 031105_【第11章:Java常用类库】_日期操作类(Date、Calendar)笔记.pdf 031106_【第11章:Java常用类库】_日期操作类(DateFormat、SimpleDateFormat)笔记.pdf 031107_〖第11章:Java常用类库〗_实例操作:取得当前日期笔记.pdf 031108_【第11章:Java常用类库】_Math与Random类笔记.pdf 031109_【第11章:Java常用类库】_NumberFormat笔记.pdf 031110_【第11章:Java常用类库】_大数操作(BigIntger、BigDecimal)笔记.pdf 031111_【第11章:Java常用类库】_对象克隆技术笔记.pdf 031112_【第11章:Java常用类库】_Arrays笔记.pdf 031113_【第11章:Java常用类库】_比较器(Comparable、Comparator)笔记.pdf 031114_【第11章:Java常用类库】_观察者设计模式笔记.pdf 031115_【第11章:Java常用类库】_正则表达式笔记.pdf 031116_【第11章:Java常用类库】_定时调度笔记.pdf 031201_【第12章:JAVA IO】_File类笔记.pdf 031202_【第12章:JAVA IO】_RandomAccessFile笔记.pdf 031203_【第12章:JAVA IO】_字节流与字符流笔记.pdf 031204_【第12章:JAVA IO】_字节-字符转换流笔记.pdf 031205_【第12章:JAVA IO】_内存操作流笔记.pdf 031206_【第12章:JAVA IO】_管道流笔记.pdf 031207_【第12章:JAVA IO】_打印流笔记.pdf 031208_【第12章:JAVA IO】_System类对IO的支持笔记.pdf 031209_【第12章:JAVA IO】_BufferedReader笔记.pdf 031210_〖第12章:JAVA IO〗_IO操作实例笔记.pdf 031211_【第12章:JAVA IO】_Scanner笔记.pdf 031212_【第12章:JAVA IO】_数据操作流笔记.pdf 031213_【第12章:JAVA IO】_合并流笔记.pdf 031214_【第12章:JAVA IO】_压缩流笔记.pdf 031215_【第12章:JAVA IO】_回退流笔记.pdf 031216_【第12章:JAVA IO】_字符编码笔记.pdf 031217_【第12章:JAVA IO】_对象序列化笔记.pdf 031218_〖第12章:JAVA IO〗_实例操作—单人信息管理程序笔记.pdf 031219_〖第12章:JAVA IO〗_实例操作:投票程序笔记.pdf 031301_【第13章:Java类集】_认识类集、Collection接口笔记.pdf 031302_【第13章:Java类集】_List接口笔记.pdf 031303_【第13章:Java类集】_LinkedList类笔记.pdf 031304_【第13章:Java类集】_Set接口笔记.pdf 031305_【第13章:Java类集】_排序及重复元素说明笔记.pdf 031306_【第13章:Java类集】_SortedSet接口笔记.pdf 031307_【第13章:Java类集】_Iterator接口笔记.pdf 031308_【第13章:Java类集】_ListIterator接口笔记.pdf 031309_【第13章:Java类集】_foreach及Enumeration接口笔记.pdf 031310_【第13章:Java类集】_Map接口笔记.pdf 031311_【第13章:Java类集】_Map接口使用的注意事项笔记.pdf 031312_【第13章:Java类集】_IdentityHashMap类笔记.pdf 031313_【第13章:Java类集】_SortedMap类笔记.pdf 031314_【第13章:Java类集】_集合工具类:Collections笔记.pdf 031315_【第13章:Java类集】_Stack类笔记.pdf 031316_【第13章:Java类集】_属性类:Properties笔记.pdf 031317_〖第13章:Java类集〗_范例讲解:一对多关系笔记.pdf 031318_〖第13章:Java类集〗_范例讲解:多对多关系笔记.pdf 031401_【第14章:枚举】_枚举的作用笔记.pdf 031402_【第14章:枚举】_Enum笔记.pdf 031403_【第14章:枚举】_类集对Enum的支持笔记.pdf 031404_【第14章:枚举】_枚举的其他应用笔记.pdf 031501_【第15章:Java反射机制】_认识Class类笔记.pdf 031502_【第15章:Java反射机制】_Class类的使用笔记.pdf 031503_【第15章:Java反射机制】_反射应用——取得类的结构笔记.pdf 031504_【第15章:Java反射机制】_Java反射机制的深入研究笔记.pdf 031505_【第15章:Java反射机制】_动态代理笔记.pdf 031506_【第15章:Java反射机制】_工厂设计模式笔记.pdf 031601_【第16章:Annotation】_系统内建Annotation笔记.pdf 031602_【第16章:Annotation】_自定义Annotation笔记.pdf 031603_【第16章:Annotation】_反射与Annotation笔记.pdf 031604_【第16章:Annotation】_深入Annotation笔记.pdf 031701_【第17章:Java数据库编程】_JDBC概述笔记.pdf 031702_【第17章:Java数据库编程】_MySQL数据库笔记.pdf 031703_【第17章:Java数据库编程】_SQL语法基础笔记.pdf 031704_【第17章:Java数据库编程】_JDBC操作步骤及数据库连接操作笔记.pdf 031705_【第17章:Java数据库编程】_执行数据库更新操作笔记.pdf 031706_【第17章:Java数据库编程】_ResultSet接口笔记.pdf 031707_【第17章:Java数据库编程】_PreparedStatement接口笔记.pdf 031708_【第17章:Java数据库编程】_处理大数据对象(1)—处理CLOB数据笔记.pdf 031709_【第17章:Java数据库编程】_处理大数据对象(2)—处理BLOB数据笔记.pdf 031710_【第17章:Java数据库编程】_CallableStatement接口笔记.pdf 031711_【第17章:Java数据库编程】_JDBC 2.0操作笔记.pdf 031712_【第17章:Java数据库编程】_事务处理笔记.pdf 031713_【第17章:Java数据库编程】_使用元数据分析数据库笔记.pdf 031714_【第17章:Java数据库编程】_使用JDBC连接Oracle笔记.pdf 031801_【第18章:图形界面】_AWT、Swing简介笔记.pdf 031802_【第18章:图形界面】_基本容器:JFrame笔记.pdf 031803_【第18章:图形界面】_标签组件:JLabel笔记.pdf 031804_【第18章:图形界面】_按钮组件:JButton笔记.pdf 031805_【第18章:图形界面】_布局管理器笔记.pdf 031806_【第18章:图形界面】_其他容器笔记.pdf 031807_【第18章:图形界面】_不弹起的按钮组件:JToggleButton笔记.pdf 031808_【第18章:图形界面】_文本组件:JTextComponent笔记.pdf 031809_【第18章:图形界面】_事件处理笔记.pdf 031810_【第18章:图形界面】_单选钮:JRadioButton笔记.pdf 031811_【第18章:图形界面】_复选框:JCheckBox笔记.pdf 031812_【第18章:图形界面】_列表框:JList笔记.pdf 031812_【第18章:图形界面】_下拉列表框:JComboBox笔记.pdf 031813_【第18章:图形界面】_菜单组件笔记.pdf 031814_【第18章:图形界面】_文件选择框笔记.pdf 031815_【第18章:图形界面】_表格笔记.pdf 031901_【第19章:Java网络编程】_IP(Internet Protocol)与InetAddress笔记.pdf 031902_【第19章:Java网络编程】_URL与URLConnection笔记.pdf 031903_【第19章:Java网络编程】_URLEncoder与URLDecoder笔记.pdf 031904_【第19章:Java网络编程】_TCP程序设计笔记.pdf 031905_【第19章:Java网络编程】_UDP程序设计笔记.pdf 032001_【第20章:Java新IO】_缓冲区与Buffer笔记.pdf 032002_【第20章:Java新IO】_通道(Channel)笔记.pdf 032003_【第20章:Java新IO】_文件锁笔记.pdf 032004_【第20章:Java新IO】_字符集笔记.pdf 032005_【第20章:Java新IO】_Selector笔记.pdf 042101_【课程讲解】_附录:Eclipse开发工具笔记.pdf 050101_〖开发实例〗_Java开发实例讲解(人员管理)笔记.pdf

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jz_Stu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值