顺序结构就是程序从上到下逐行的执行,中间没有任何判断和跳转,Java 中如果 main 方法中没有任何流程控制,则程序总是从上向下依次执行,排在前面的代码先执行,排在后面的代码后执行。
上面的三个语句中,放在 if 之后括号里的只能是一个逻辑表达式,即这个表达式的返回值只能是 true 或 false。花括号中的代码被称为代码块,一个代码块通常被当成一个整体来执行,因此这个代码块也被称为条件执行体。 该语句的执行顺序是 先判断 if 后面括号中的表达式,如果表达式为 true,执行括号后面的代码块,跳过下方的 else 判断,如果为 false 则继续向下执行到下一个 if 判断处,如果所有的 if 判断都为 fasle 则直接执行 else 后的代码块。
这种分支语句的执行是先对 expression 求值,然后依次匹配 condition1 、condition2…conditionN 等值,遇到匹配的值即执行对应的执行体,如果 case 后的值都不与 expression 表达式的相同,则执行 default 后面的代码块。
while循环每次执行循环体之前,先对test_expression循环条件求值,如果循环条件为 true,则运行循环体部分。
//循环的初始化条件 int count = 0; //当 count 小于10时,执行循环体 while (count < 10) { System.out.println(count); //迭代语句 count++; } System.out.println("循环结束!");do while循环与while循环的区别在于:while循环是先判断循环条件,如果循环条件为真则执行新合同,而 do while循环则先执行循环体,然后才判断循环条件,如果循环条件为真,则执行下一次循环,否则中止循环。
do { statement; [iteration_statement] }while(test_expression);do while循环的循环条件后必须有一个分号,这个分号表明循环结束。
//循环的初始化条件 int count = 0; //当 count 小于10时,执行循环体 do { System.out.println(count); //迭代语句 count++; }while (count < 10); System.out.println("即使循环条件一开始就是 false ,do while循环也会执行循环体,因此,do while至少会执行一次。
for循环是更加简洁的循环语句,大部分情况下,for循环可以代替 while 循环、do while循环。
for([init_statement;[test_expression];[iteration_statement]) { statement... }程序执行for循环时,先执行循环的初始化语句 init_statement,初始化语句只在循环开始前执行一次。先计算test_expression循环条件的值,如何循环条件,返回 true,则执行循环体,循环体执行结束后执行循环迭代语句。
//循环的初始化条件、循环条件,循环迭代语句都在下面一行 for (int count = 0 ; count < 10 ; count++) { System.out.println(count); } System.out.println("循环结束!");如果把一个循环放到另一个循环体中,那么就可以形成嵌套循环,嵌套循环既可以是for循环,也可以是while循环,也可以是while循环嵌套do while循环。
//外层循环 for (int i = 0 ; i < 10 ; i++) { //内层循环 for (int j = 0; j < 3; j++){ System.out.println(); } }foreach循环,这种循环遍历数组和集合更加简洁。使用foreach循环遍历数组和集合元素时,无需获得数组和集合长度,需要根据索引来访问数组元素和集合元素,foreach循环自动遍历数组的和集合的每个元素。
for(type variableName : array|collection) { //variableName 自动迭代访问每个元素... }上面的语法格式中,type是数组的元素或集合元素的类型,variableName 是一个形参名,foreach将自动将数组元素、集合依次赋值给该变量。
String[] books = {"spring实战","java核心思想第四版"}; // book会自动迭代每个数组元素 for (String book: books){ System.out.println(book); }某些时候需要在某种条件出现时强行终止循环,而不是等到循环条件为 false 时才退出循环。可以使用break关键在完成这个功能。break 用于完全介绍一个循环,跳出循环体。不管是哪种循环,一旦在循环体中遇到 break,系统将完全结束该循环,开始执行循环之后的代码。
//一个简单的for循环 for (int i = 0 ; i < 10 ; i++) { if (i == 2){ // 执行该语句时将结束循环 break; } }值得一提的是break不仅可以结束内层循环,还可以直接结束外层循环,只需要为外层循环添加一个标签即可。
outer: for (int i = 0 ; i < 10 ; i++) { //内层循环 for (int j = 0; j < 3; j++){ System.out.println(i); if (i == 2){ // 执行该语句时将结束循环 break outer; } } }continue的功能和break有点类似,区别是,continue只会忽略本次循环,接着开始下一次循环,并不会终止循环,而break则是完全终止循环本身。
for (int i = 0 ; i < 10 ; i++) { System.out.println(i); if (i == 2){ // 忽略本次循环剩下的语句 continue; } }break的标签功能,continue也是可以使用的。
outer: for (int i = 0 ; i < 10 ; i++) { //内层循环 for (int j = 0; j < 3; j++){ System.out.println(i); if (i == 2){ // 忽略outer标签所指定的循环中本次循环所剩下的语句 continue outer; } } }return关键字并不是专门用于接收循环的,return的功能是结束一个方法。当一个方法执行到一个return语句时,这个方法将被结束。
for (int i = 0 ; i < 10 ; i++) { System.out.println(i); if (i == 2){ // 直接结束本方法 return; } }Java 的数组要求所有的数组元素具有相同的数据类型。因此,在一个数组中,数组元素的类型是唯一的,即一个数组里只能存储一种数据类型的数据,而不能存储多种数据类型的数据。 一旦数组的初始化完成看,数组在内存中所占用的空间将被固定下来,因此数组的长度将不可改变。即使吧某个数组元素的数据清空,但它所占的空间依然被保留,依然属于该数组,数组的长度依然不变。 Java的数据既可以保存基本数据类型,也可以保存引用数据类型,数组本身就是一种引用的数据类型。
上面的语法格式中,type就是数组元素的数据类型,此处的type必须与定义数组变量时所使用的type相同,也可以是定义数组时所指定的type的子类,并使用花括号把所有的数组元素括起来,多个数组元素之间以逗号隔开,定义初始化的花括号紧跟 [] 之后。
//静态初始化一个int类型的数组 int[] intArr; intArr = new int[]{1,2,3,4,5,6}; //静态初始化一个object类型的数组 Object[] objArr; objArr = new String[]{"java","python"};在上面的语法中,需要指定一个int类型的参数length,这个参数指定了数组的长度,也就可以容纳数组元素的个数。
//动态初始化一个int类型的数组 int[] intArr = new int[5]; //静态初始化一个object类型的数组 Object[] objArr = new String[6];执行动态初始化时,只需要指定数组的长度,即为每个数组元素指定所需的内存空间,系统将负责为这些元素分配初始值。