1 流程控制与数组
1.1 顺序结构
- 任何编程语言中最常见的结构就是顺序结构。顺序结构就是程序从上到下逐行的执行,中间没有任何的判断和跳转。如果mian方法的多行执行代码之间没有任何流程控制语句,那么程序总是从上到下依次执行的,排在前面的代码先执行,排在后面的代码后执行。
1 .2 分支结构
- Java提供了两种常见的分支结构:if语句和switch语句,其中if语句使用布尔表达式或布尔值来作为分支条件判断来进行分支控制;而switch语句则用于对多个整型值进行匹配,从而实现分支控制。
1.2.1 if条件语句
- if语句有如下三种形式
- 第一种:
if(布尔表达式){
执行体;
}
- 第二种:
if(布尔表达式){
执行体;
}else{
执行体;
}
- 第三种:
if(布尔表达式){
执行体;
}else if(布尔表达式){
执行体;//可以有多个else if语句
}else{
执行体;//最后的else也可省略
}
在上面的条件语句中,if,else,else if后面的花括号中的多行代码被称为代码块,一个代码块通常被当成一个整体来执行(除非运行过程中遇到return,break,continue等关键字,或者遇到了异常),因此这个代码块也被称为条件执行体。
注意!if,else,else if后的条件执行体要么是一个花括号括起来的代码块,则这个代码块整体作为条件执行体;要么是以分号结尾的一行语句,甚至可能是一个空语句(空语句只是一个分号),那么就只是这条语句作为条件执行体。
1.2.2 Java7增强后的switch分支语句
- switch语句由一个控制表达式和多个case标签组成,和if语句不同的是,switch语句后面的控制表达式的数据类型只能是byte,short,char,int四种整数类型,枚举类型和java.lang.String类型(从Java7才允许),不能是布尔型。
- switch语句往往需要在case标签后紧跟一个代码块,case标签作为这个代码块标识,switch语句的语法格式如下:
switch(expression){
case condition1:
{
statement(s);
break;
}
case condition2:
{
statement(s);
break;
}
case condition3:
{
statement(s);
break;
}
default:
{
statement(s)
}
}
switch语句的执行是先对expression表达式求值,然后一次匹配condition1,condition2,condition3…等值,遇到匹配的值即执行对应的执行体,如果所有case的值都不匹配,则执行default标签后的代码块。
和if语句不同的是,switch语句中各case标签后代码块的开始点和结束点非常清晰,因此完全可以省略case标签后的花括号。
值得注意的是:在使用switch语句的时候,要注意switch语句后的expression表达式数据类型只能是byte,short,char,int四种整数类型,String和枚举类型;第二个要注意的地方就是,如果省略了case之后的break语句,程序一旦遇到匹配的case值,便开始执行这个case之后的代码,不再判断之后的case、default标签的条件是否匹配,一直将所有的代码块都执行完才会结束。这是一个陷阱。
end
1.3 循环结构
循环结构可以在满足循环条件下的情况下,反复执行某一段代码。这段被重复执行的代码被称为循环体。当反复执行这个循环体时,需要在合适的时候把循环条件改为假,从而结束循环,否则循环将一直执行下去,称为死循环。循环结构可能包含如下四个部分:
- 初始化语句:一条或多条语句,这些语句用于完成一些初始化工作,初始化语句在循环开始之前执行。
- 循环条件:是一个布尔表达式,这个表达式决定是否执行循环体。
- 循环体:这个部分是循环的主体,如果循环条件允许,这个代码块将被重复执行。如果这个代码块只有一行语句,则这个代码块的花括号是可以省略的。
- 迭代语句:这个部分在一次循环体执行结束之后,对循环条件求值之前执行,通常用于控制循环条件中的变量,使得循环在合适的地方结束。
1.3.1 while循环
while循环的语法格式如下:
[init_statement]
while(test_expression){
statement;
[interation_statement]
}
end
1.3.2 do while循环
do while循环语句的语法格式如下:
[init_statement]
do{
statement;
[iteration_statement]
}while(test_expression);
与while循环不同的是,do while语句的循环条件之后必须有一个分号,这个分号表明循环结束。注意!do while循环至少会执行一次。
end
1.3.3 for循环
for循环是更加简洁的循环语句,大部分情况之下,for循环可以代替while、do while循环。for循环的基本语法格式如下:
for([init_statement];[test_expression];[iteration_statement]){
statement;
}
程序执行for循环时,先执行循环的初始化语句init_statement,初始化语句只在循环开始之前执行一次。每次执行循环体之前,先计算test_expression循环条件的值,如果循环条件返回值true,则执行循环体,循环体执行结束后开始执行迭代语句。因此,对于for循环而言,循环条件总比循环体多执行一次,因为最后一次执行循环条件返回值false,将不再执行循环体。值得注意的是,for循环的迭代体并没有与循环体放在一起,因此即使在执行循环体的时候遇到continue语句结束本次循环,循环迭代语句也一样会得到执行
end
1.3.4 嵌套循环
如果把一个循环放在另一个循环体内,那么就可以形成嵌套循环。
end
1.4 控制循环结构
Java语言没有提供goto语句来控制程序的跳转,这种做法提高了程序的可读性,但是降低了程序流程控制的灵活性。为了弥补这种不足,Java提供了continue和break来控制循环结构。除此之外,return可以结束整个方法,当然也就结束了一次循环。
1.4.1 使用break结束循环
有时候需要在某种条件出现之后强行终止循环,而不是等到循环条件为false的时候才退出循环。此时,可以使用break来完成这个功能 。break用于完全结束一个循环。跳出循环体,不管是哪种循环,一旦在循环体中遇到break,系统将完全结束该循环,开始执行循环之后的代码。
break语句不仅可以结束其所在的循环,还可以直接结束外层循环,此时需要在break后紧跟一个标签,这个标签用于标识一个外层循环。java中的标签就是一个紧跟着英文冒号(:)的标识符,与其他语言不同,Java中的标签只有放在循环语句之前才有作用,例如如下代码:
public class Test{
public static void main(String[] args) {
outer:
for(int i = 0; i < 10; i++){
for(int j = 0; j < 10; j++){
if(j==9){
break outer;
}
System.out.print("i is "+i+"and j is "+j+" ");
}
System.out.println();
}
}
}
end
1.4.2 使用continue忽略本次循环剩下语句
continue的功能和break有点类似,区别是continue语句只是忽略了本次循环剩下语句,借着开始新的循环,并不会终止循环;而break则是完全终止循环本身。
1.5
1.5.1 理解数组:数组也是一种类型
- Java的数组要求所有的元素具有相同的数据类型。因此,在一个数组中,数组元素的类型是唯一的,即一个数组里只能存储一种数据类型的数据,而不能存储多种数据类型的数据。
- 一旦数组的初始化完成,数组在内存中所占的空间将被固定下来,因此数组的长度不可改变,即使把某个数组元素的数据清空,但它所占的空间依然被保留,依然属于该数组,数组的长度依然不变。
- Java的数组既可以存储基本类型数据,也可以存储引用类型的数据,只要所有的数组元素具有相同类型即可。
1.5.2 定义数组
Java语言支持两种语法来定义数组:
type[] arrayName;
type arrayName[];
我们通常会建议使用第一种方法来定义数组,因为前者可以很明了的让我们知道这是一个数组类型,类型为type[],可读性较高。
end
1.5.3 数组的初始化
- 静态初始化
arrayName = new type[]{element1,element2,element3....};
- 动态初始化
arrayName = new type[length];
执行动态初始化的时候,程序员只要显式的指定数组的长度即可,即为每个数组元素分配所需的内存空间,系统将负责为这些数组元素分配初始值,指定初始值时,系统按照如下规则分配初始值:
- byte,short,int,long:0
- float,double:0.0
- char:’/u0000’
- boolean:false
- 引用类型:null
end
1.5.4 使用数组
- 访问数组元素
arrayName[index];
注意数组元素下标从0开始,如果访问数组元素时的索引值小于0或者大于等于数组的长度,编译程序不会有报错,但是运行时出现异常。
- foreach循环
在Java 5 之后,Java提供了一种更简单的循环,这种循环遍历数组集合更加简单。使用foreach遍历数组元素时,无需获得数组长度,无需根据索引来访问数组元素,foreach循环自动遍历数组元素,使用方法如下:
foreach(type temp : arrayName){
//temp自动迭代访问每个元素...
}
end
1.3 JavaSE数组与方法互操作
https://blog.csdn.net/weixin_44372771/article/details/88247595