不管是哪种编程语言,都有两种流程控制结构:分支结构和循环结构。分支结构用于实现根据条件来选择性的执行某段代码,循环结构则用于实现根据循环条件重复执行
某段代码。Java也提供了这两种流程控制结构,Java提供了if和switch两种分支语句;提供了while、do while和for三种循环语句。还有一种用于遍历的循环,使用foreach循环可以遍历集合、数组的元素。
一、分支结构
1.1if条件语句
if语句使用布尔表达式或布尔值作为分支条件来进行分支控制。
使用if...else语句时,一定要处理包含范围更小的情况。
1.2switch分支语句
switch语句后面的控制表达式的数据类型只能是byte、short、int、long四种整数类型,在Java7之后能够支持string和枚举类型;使用switch分支语句时需要注意到case后代码块的break。
二、循环结构
循环语句在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体。当反复执行这个循环体,需要在合适的时候把循环条件改为假,从而把循环结束,否则
循环将一直执行下去,形成死循环。
2.1while循环语句
while(test_expression){
statement(iteration_statement)
}
2.2do while循环语句
do{
statement;(iteration_statement)
}while(test_expression)
2.3for循环
for([init_statement];[test_expression];[iteration_statement]){
statement;
}
2.4控制循环结构
使用break结束循环:某些时候需要在某种条件出现时强行终止循环,而不是等到循环条件为false的时候才终止循环。break用于结束一个循环,跳出循环体。不管是哪种循环,一旦在循环体中
遇到了break,系统将完全结束该循环,开始执行循环后的代码。
使用continue忽略本次循环剩下语句:continue是忽略本次循环剩下语句,接着开始下一次循环,并不会终止循环;而break是终止循环本身。
使用return结束方法:并不是专门用于结束循环的,return的功能是结束一个方法。
三、数组
数组时编程语言中常见的一种数据结构,可以用于存储数据,每个数组元素放一个数据,通常可以通过数组元素的索引去访问数组元素,也可以为数组元素赋值和取出数组元素的值。
3.1数组特性
数组也是一种类型:Java数组的数组元素具有相同的数据类型,一个数组里只能存储一种数据类型的数据,不能存储多种数据类型的数据。一旦数组的初始化完成,数组在内存中所占的空间将被
固定下来,因此数组的长度将不可改变。即使把某个数组元素的数据清空,但它所占的空间依然被保留,依然属于该数组,数组的长度依然不变。
定义一个数组:type [ ] arrayName;数组是一种引用类型的变量,所以使用它定义一个变量时,仅仅表示定义了一个引用变量(也就是定义了一个指针,但是没有任何意义)。这个引用变量还没有指向
任何有效的内存,因此定义数组时不能指定数组的长度。只有对数组进行初始化后才可以使用。
数组的初始化:Java语言中数组必须先初始化,才可以使用。初始化就是为数组的数组元素分配内存空间,并且为每个数组元素赋初始值。
数组的初始化有两种方式:
- 静态初始化:初始化时由程序员显式的为每个数组元素赋予初始值,由系统决定数组长度。arrayname=new type[]{element1,element2,element3};type[] arrayname={element1,element2};
2.动态初始化:初始化程序员只指定数组长度,由系统为每个数组元素分配初始值。arrayname=new type[length];
3.2foreach循环
foreach循环是用来循环遍历集合和数组的,十分方便。不用获取数组和集合长度,无须根据索引来访问数组元素和集合元素,foreach循环自动遍历数组和集合的每个元素。
语法格式如下:for(type variableName: array|collection){
自动迭代访问每个数组元素...
}
三、深入了解数组
数组是一种引用数据类型,数组引用变量只是一个引用,数组元素和数组变量在内存里是分开存放的。下面将介绍数组在内存中的运行机制。
3.1内存中的数组
数组引用变量只是一个引用,这个引用变量可以指向任何有效的内存,只有当引用变量指向有效的内存时,才可以通过数组变量访问数组元素。
实际的数组对象被存储在堆内存中·;如果引用该数组对象的数组引用变量时一个局部变量,那么它存储在栈内存中。数组在内存中的存储如图所示,
如图要访问堆内存中的数组元素时,则程序中只能通过p[index]的形式。也就是说,数组引用变量时访问堆内存中数组元素的根本方式。
当一个方法执行时,每个方法都会创建自己的内存栈,在这个方法中声明的变量都会放到这个栈内存中,随着方法执行的结束,这个方法的内存栈也就会自然被销毁。所有方法定义的
局部变量都是放到栈内存中;在程序中创建一个对象后,这个对象被保存到运行时数据区中,这个区域就叫做堆内存。只有当堆内存没有一个引用变量去指向它时,系统的垃圾回收机制或
将这个内存区回收。
定义并初始化一个数组后,在内存中分配了两个空间,一个用于存放数组的引用变量在栈内存中,一个用于存放数组的本身在堆内存中。引用变量在栈内存中就像是一个地址,通过访问
这个地址就可以访问到地址上的东西堆内存,访问到其中的数据。没有这个引用变量的地址时,是无法访问到堆内存的,只有通过数组引用变量才能访问到。