Java-SE流程控制与数组

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值