【Java编程思想笔记】第四章-流程控制

  • Foreach循环可用于数组,以及实现了java.util.Iterator接口的对象。
public interface Iterable<T> {
    Iterator iterator();
}
  • 如果在返回void的方法中没有return语句,那么在该方法的结尾处会有一个隐式的return,因此在方法中并非总是必须要有一个return语句。但是,如果一个方法声明它将返回void之外的其他东西,那么必须确保每一条代码路径都将返回一个值。
int i;
for (i = 0; i <= 5; i++) {
       if (i == 2) {
              break;//退出时i不会再递增,但continue会
       }
}
System.out.println("i=" + i);//2

for(;;)while(ture)等效。

  • 尽管goto仍是Java中的一个保留字,但在语言中并未使用它,Java没有goto。但可使用带标签的 continue或break来完成类似的跳转操作。

  • 带标签与不带标签的continue、break用于迭代语句时规则:

    1. 一般的continue会退回到最内层循环的开头,并继续执行循环。
      带标签的continue会到标签的位置,并重新进入紧接在那个标签后面的循环。
    2. 一般的break会中断并跳出当前循环。
    3. 带标签的break会中断并跳出标签所指的循环。

在Java里需要使用标签的唯一理由就是因为有循环嵌套存在,而且想从多层嵌套中break或continue到外层循环外。

标签只能紧跟在循环语句前(注:如果中间还有其他语句,则continue与break语句编译出错,但如果标签不应用到continue与break中,则不会有问题)

int i = 0, j = 0;
outer:
// !! 注,标签的下面不能写任何其他非迭代语句
for (; i < 5; i++) { // 死循环
       inner:
       // !! 注,标签的下面不能写任何其他非迭代语句
       for (; j < 10; j++) {
              System.out.println(("i=" + i + " j = " + j));
              if (j == 2) {
                     System.out.println("continue");
                     continue;// 回到内层循环起始处继续执行内层循环,j会自动递增
              }
              if (j == 3) {
                     System.out.println("break");
                     // 为了下次循环不再走该分支,则要使用i递增1,因为break后j不会自动递增
                     j++;
                     break;// 跳出内层循环,回到外层循环起始处继续执行外层循环
              }
              if (j == 7) {
                     System.out.println("continue outer");
                     // 由于带标签的continue跳到了外层循环起始处,所以j不会自动递增,但为了
                     // 下一次不再走该分支,所以要手动递增1
                     j++;
                     continue outer;
              }
              if (j == 8) {
                     System.out.println("break outer");
                     break outer;// 当j为8时,退出内外层循环,实质上执行最后打印语句
              }
              for (int k = 0; k < 5; k++) {
                     if (k == 3) {
                            System.out.println("continue inner");
                            // j为0、1、4、5、6时分别会执行一遍
                            continue inner;
                     }
              }
       }
}
// 由于 break outer 跳出,所以i不会递增,最后还是2
System.out.println(("i = " + i));

switch(integer-selector){
       case integer-value1: statement;break;
       case integer-value2: statement;break;
case integer-value3: statement;break;
//…
default: statement;break;
}
  • switch语句是可用的选择数据类型有 int、char、enum。

  • case均以一个break结尾,这样可使执行流程跳转至switch主体的末尾。这是构建switch语句的一种传统方式,但break是可选的。若省略break,会继续执行后面的case语句,直到遇到一个break为止。注意最后的default语句没有break,因为执行流程已到了break的跳转目的地。当然,如果考虑到编程风格方面的原因,完全可以在default语句的末尾放置一个break,尽管它并没有任何实际的用处。

你可能感兴趣的:(java编程思想笔记)