分支语句
if括号里的只能是一个逻辑表达式,即这个表达式返回的值只能是true或false。
代码块用花括号括起来,一个代码块通常被当成一个整体来执行(除非遇到return、break、continue等关键字,或者遇到异常)。
if……else语句有一条基本规则:总是优先把范围小的条件放在前面处理。
switch语句由一个控制表达式和多个case标签组成,和if语句不同的是,switch语句后面的控制表达式的数据类型只能是byte、short、char、int四种整数类型,枚举类型和java.lang.String类型(从Java 7才允许),不能是boolean类型。
switch (expression){ case conditionl: { statement(s); break; } ………… default; { statement(s); }}
每一个case标签后的每个代码块后都有一条break;语句,这个语句有极其重要的意义,Java的switch语句允许case后面没有break语句,但是这样做可能引入一个陷井,程序会一直执行下去。switch语句会先求出expression表达式的值,然后拿这个表达式和case标签后的值进行比较,一旦遇到相等的值,程序会执行case后面的代码,不再判断后面case、default标签的条件是否匹配。
Java7增强了switch语句的功能,允许switch语句的控制表达式是java.lang.String类型的标量或表达式——只能是java.lang.String类型,不能使StringBuffer或StringBuilder这两种字符串类型。
循环结构
while语句
while循环语法格式如下:
[init_statement] while(test_expression);{ statement; [iteration_statement]; }
while循环每次执行执行体前,先对text_expression循环条件求值,如果循环条件为true,则运行循环体部分。上面迭代语句总是位于循环体最后,只有当循环体执行之后,while循环才会执行迭代语句。
while循环的循环体部分与迭代语句合并在一起,只有一行代码,可以省略后面的花括号,但不建议。如果省略掉花括号,那么循环条件控制到紧跟该循环条件的第一个分号处。
使用while循环语句一定要保证循环条件有false的时候,否则这个循环将称为一个死循环。
int i= 0; while (i < 10);{ System.out.println("不停的死循环!" + i); }
while循环条件后面一定要紧跟一个分号;while循环条件后面一定要紧跟一个分号;while循环条件后面一定要紧跟一个分号; 重要的事说三遍
在java程序中,一个单独的分号表示一个空语句,不做任何事情的空语句。
do……while语句
do……while循环和while循环的区别在于,while循环是先判断循环条件,如果条件为真,则执行循环体;而do……while循环则先执行循环体,然后才判断循环条件,如果循环条件为真,则执行下次一次循环,否则中止循环。
[init_statement] do{ statement; [iteration_statement]; } while(test_expression);
do……while循环的循环条件后必须有一个分号,这个分号表明循环结束。
do……while循环的循环体至少会被执行一次。
for循环
for ([init_statement]; test_expression; [iteration_statement]; ){ statement; }
for循环的循环迭代语句并没有与循环体放在一起,因此即使在执行循环体时遇到continue语句结束本次循环,循环迭代语句也是一样会得到执行。
for循环的初始化语句只有一个,循环条件也只是一个简单的boolean表达式。实际上,for循环允许同时制定多个初始化语句,循环条件也可以是一个包含逻辑运算符的表达式
for(int i = 0, j = 0; i < 10 && j < 10; i++, j++){ statement }
for循环循环体内可以修改循环变量,但这样可能会产生一个死循环,所以建议不要在循环体内修改循环变量(也叫循环计数器)的值,否则会增加程序出错的可能性。如果真的需要访问、修改循环变量,建议重新定义一个临时变量,先将循环变量赋值给临时变量,然后对临时变量的值进行修改。
for循环圆括号内的两个分号是必须的,初始化语句、循环条件、迭代语句部分都是可以省略的。不过如果省略的循环条件,则这个循环条件默认为true,陷入死循环。
可以将初始化条件定义在循环体之外,把循环迭代语句放在循环体内,这种做法类似于前面的while循环
int i = 0; for(; i < 10;){ System.out.println(i); i++; }
把for循环的初始化语句放在循环之前定义还有一个作用:可以扩大初始化语句中所定义变量的作用域。在for循环里定义的变量,其作用域仅在该循环内有效,for循环中止之后,这些变量将不可被访问。如果需要在循环以外使用这些变量的值,就可以采用上面的做法。除此之外,还可以额外定义一个变量来保存这个循环条件的值。
int temp = 0; for(int i = 0; i < 10; i++){ statement //使用temp保存循环变量 temp = i; }
嵌套循环
把一个循环放在另一个循环体内。形成嵌套循环,当程序遇到嵌套循环时,如果外层循环条件允许,则开始执行外层循环的循环体,而内层循环将被外层循环的循环体来执行——只是内层循环需要反复执行自己的循环体而已。当内存循环执行结束,且外层循环的循环体执行结束,则再次计算外层循环的循环条件,决定是否再次执行外层循环的循环体。
使用break结束循环
break用于完全结束一个循环,跳出循环体。
break语句不仅可以结束其所在循环,还可以直接结束其外层循环。此时需要在break后紧跟一个标签,这个标签用于标识一个外层循环。
Java中的标签就是一个紧跟英文冒号的(:)标识符。Java标签只有在循环体中才能使用。
//外层循环,outer作为标识符 outer; for (int i = 0; i < 5; i++){ for( int j = 0; j < 3; j++){ System.out.println("打印j和i的值"); if( j == 1 ){ //跳出outer标签所标识的循环 break outer; } } }
break后的标签必须是一个有效的标签,即这个标签必须在break语句所在的循环之前定义,或者在其所在的循环的外层循环之前定义。break默认是结束其所在标签。
public class hh{ public static void main(String[] args){ //请注意outer后面跟的是英文冒号 outer: for (int i = 0; i < 5; i++){ for( int j = 0; j < 3; j++){ System.out.println("打印j和i的值" + "i = " + i + "j = " + j); if( j == 1 ){ //跳出outer标签所标识的循环 break outer; } } } } }
使用continue忽略本次循环剩下的语句
continue后面也可以紧跟一个标签,用于直接跳过标签所标识循环的当次循环的剩下语句,重新开始下一次循环。
使用return结束方法
return关键字不是专门用来结束循环的,return的功能室结束一个方法。当一个方式执行到一个return语句时(return关键字后还可以紧跟变量,常量和表达式),这个方法将被结束。