一个人至少拥有一个梦想,有一个理由去坚强

心若没有栖息的地方,到哪里都是在流浪

java编程思想——第四章控制执行流程

就像有知觉的生物一样,程序必须再执行过程中控制它的世界,并做出选择。在java中,你要使用执行控制语句来做出选择。

java中控制流程的涉及的关键字包括:if-else、while、do-while、for、return、break、swich。java不支持goto语句。

4.1 true 和 false

所有条件语句都利用条件表达式的真假来决定执行路径。例如:

a == b

利用操作符==,判断a的值是否等于b的值。该表达式会返回:true或false.

java中不允许一个数字作为布尔值使用。

4.2 if-else

if-else语句是控制程序流程的最基本形式。其中else是可选的。

两种使用形式:

if(Boolean-expression) {//statement }
和
if (Boolean-expression) { // statement} else { //statement  }

4.3迭代

while、do-while和for用来控制循环,将它们划分为迭代语句(iteration statement)。

迭代语句是:语句会重复执行,直到起控制作用的布尔表达式(Booleanexpression)得到“假”的结果为止。

while格式:

while(Boolean-expression) {
  //statement
}

do-while格式:

do {
  //statement
} while (Boolean-expression)

while和do-while唯一的区别就是do-while的语句至少会执行一次。

for循环格式:

for (initialization; Boolean-expression; step ) {
  //statement
}

分别代表:初始化(initialization)表达式、布尔表达式(Boolean-expression)或者步进(step)运算。这三者都可以为空。

运算步骤:先初始化,然后进入布尔表达式,若false,则不执行,若为true,则进入代码内部,执行完语句,然后到step,运算完后,再次到布尔表达式判断,若为true,继续执行里面的语句,如此的反复。

4.4 foreach语法

javaSE5引入一种新的更加简洁的for语法,用于数组和容器。表示不必创建int变量去对由访问项构成的系列进行计数,foreach将自动产生每一项。

foreach格式:

for (变量类型  变量名 : 数组或容器) {
 //statement
}

4.7 臭名昭著的goto

goto源于汇编语言的程序控制:“若条件A成立,则跳到这里,否则跳到那里”。goto语句是在源码级上的跳转,这招致不好声誉和问题。

然真正的问题不在于goto,而在于goto滥用,少数情况下,goto还是组织控制流程的最佳手段。

尽管goto仍是java中的一个保留字,但是在语言中并未使用,java没有goto。java的跳转是:break、continue。它们相似于跳转,更确切的说是中断迭代语句的一种方法。

这三者的相似性,它们都使用相同的机制:标签。

标签是后面跟有冒号的标识符。就如:

label:

java中,标签起作用的唯一地方刚好是在迭代语句之前。在标签和迭代之间置入任何语句都不好。例如:

public class LabeledFor {  
  public static void main(String[] args) {  
    int i = 0;  
    outer: // Can't have statements here  
    for(; true ;) { // infinite loop  
      inner: // Can't have statements here  
      for(; i < 10; i++) {  
        System.out.println("i = " + i);  
        if(i == 2) {  
          System.out.println("continue");  
          continue;  
        }  
        if(i == 3) {  
          System.out.println("break");  
          i++; // Otherwise i never  
               // gets incremented.  
          break;  
        }  
        if(i == 7) {  
          System.out.println("continue outer");  
          i++; // Otherwise i never  
               // gets incremented.  
          continue outer;  
        }  
        if(i == 8) {  
          System.out.println("break outer");  
          break outer;  
        }  
        for(int k = 0; k < 5; k++) {  
          if(k == 3) {  
            System.out.println("continue inner");  
            continue inner;  
          }  
        }  
      }  
    }  
    // Can't break or continue to labels here  
  }  
}

结果:

i = 0
continue inner
i = 1
continue inner
i = 2
continue
i = 3
break
i = 4
continue inner
i = 5
continue inner
i = 6
continue inner
i = 7
continue outer
i = 8
break outer

break和continue区别:

1)一般的cotinue会退出最内层循环的开头(顶部),并继续执行。

 2)带标签的continue会到达标签的位置,并重新进入紧接着那个标签后面的循环。

  3)一般的break会中断并跳出当前循环。

4)带标签的break会中断并跳出标签所指的循环。

 要记住的重点是:在Java中使用标签的唯一理由就是有循环嵌套存在,而且想从多层嵌套中break和continue。

4.8 switch

可规划为一种选择语句。switch表达式后面的数据类型只能是byte,short,char,int四种整形类型,枚举类型和java.lang.String类型(从java 7才允许),不能是boolean类型。

格式:

switch (支持的类型) {
    case  值1: statement1 ; break;
    case  值2: statement2 ; break;
    case  值2: statement3 ; break;
   //........
   default: statement;
}


注意:swich case语句有渗透性,如果case后面没有break,会一直向下执行。
点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注