流程控制
Java提供了两种流程控制结构:分支结构和循环结构。Java提供if和switch两种分支语句,还提供了while、dowhile、for三种循环结构,除此之外,foreach循环可以更简单的来遍历集合、数组的元素。Java还提供break和continue来控制程序的循环结构。
1. if条件语句
if(条件)
{
如果条件为真,则执行此段代码
}
if(条件)
{
如果条件为真,则执行此段代码
}else{
如果条件为假,则执行此段代码
}
if(条件)
{
}ifelse{
}else{
}
2. switch分支语句
switch(expression)
{
case condition1:
……
break;
case condition2:
……
break;
default:;
……
}
每个case标签后的每个代码块都有一个break;语句。Switch先计算expression的表达式的值,然后与每个case标签后的值进行比较,一旦相等,开始执行case后边的代码,直到遇到brea才结束。注意,switch后的expression表达式的数据类型只能是byte、short、int、char类型。
3. while循环语句
while(test_expression)
{
}
每次循环之前,先对test_expression循环条件求值,如果循环条件为true,则运行循环体部分。使用while循环时,一定要保证循环条件有变成false的时候。
4. do while 循环语句
do while循环与while循环的区别在于:while循环是先判断循环条件,如果条件为真才执行循环体;而dowhile循环则先执行循环体,然后判断循环条件,如果循环条件为真,则执行下一次循环,否则中止循环。
do
{
statements;
[iteration_statements]
}
while(test_expression);
5. for循环语句
for([init_statements]; [test_expression]; [iteration_statement])
{
}
执行for循环时,先执行初始化语句init_statements,这个语句只在循环开始前执行依次。每次执行循环体之前,先计算test_expression循环条件的值,如果循环条件为true,则执行循环体部分代码,然后执行循环迭代语句iteration_statement。因此,对于for循环,循环条件总比循环体要多执行一次。
6. foreach循环
使用这个循环结构可以方便的遍历数组和集合。
for(typevariableName : array | collection)
{
}
注意:foreach循环不能给数组赋值!
7. 嵌套循环
当程序语带嵌套循环时,如果外层循环的循环条件允许,则开始执行外层循环的循环体,而内层循环将外层循环的循环体来执行—只是内层循环需要反复执行自己的循环体而已。当内层循环执行结束、且外层循环的循环体执行介绍,则再次计算外层循环的循环条件,决定是否再次开始执行外层循环的循环体。
l 使用break结束循环
break用于完全结束一个循环,跳出循环体。
l 使用continue结束本次循环
continue只是中止本次循环,开始执行下一次循环。
l 使用return结束方法
当使用return语句时,return后边的语句则不执行,直接结束整个方法。
数组类型
Java的数组要求所有数组具有相同的数据类型。一旦数组的初始化完成,则数组在内存中所占用的空间大小就被固定了,数组的长度也就固定了。即使把某个数组元素的数据清空,但它所占的空间依然被保留,依然属于该数组,数组的长度依然不变。
数组的初始化:
newType[] arrayName;
arrayName =newType[]{element1, element2, element3…};//静态初始化数组
arrayName = new Type[length];//动态初始化数组
int[][] b = new int[4][5];//二维数组
使用arrayName[index]来访问数组元素的值。index表示数组元素的索引值,数组索引从0开始。使用arrayName.length来访问数组的长度。
数组是一个引用数据类型,数组引用变量只是一个引用,数组元素和数组变量在内存里是分开存放的。数组元素存储在堆(heap)内存中,数组引用变量存储在栈(stack)内存中。
为什么有栈内存和堆内存之分?
答:当一个方法执行时,每个方法都会建立自己的内存栈,在这个方法内定义的变量将会逐个放入这块栈内存里,随着方法的执行结束,这个方法内存栈也将自然销毁了。因此,所有在方法中定义的变量都是放在栈内存中的;当我们在程序中创建一个对象时,这个对象将被保存到运行时数据区中,以便反复利用(因为对象的创建成本通常较大),这个运行时数据区就是堆内存。堆内存中的对象不会随着方法的结束而销毁,即使方法结束后,这个对象还可能被另一个引用变量所引用(方法的参数传递时很常见),则这个对象依然被销毁。只有当一个对象没有任何引用变量引用它的时候,系统的垃圾回收机制会在合适的时候回收它。