zoukankan      html  css  js  c++  java
  • Java编程思想学习笔记(七)

    第四章 控制执行流程

    也是经典的基础章节,找没见过的记一下8.

    1.foreach语法

    float  f[] = new float[10];
    for(float x : f){
        System.out.println(x);
    }
    //其实就是一种遍历的简化写法
    for(char c : "Hello world!".toCharArray()){
        System.out.println(c);
    }
    //toCharArray()是String类中的一个方法,会返回一个char数组

    2.关于goto

    goto语句是在源码级别上的跳转,这也是其饱受诟病的地方,如果一个程序总是从一个地方直接跳转到另一个地方继续运行,那么其控制流程将变得难以识别。

    Java中没有直接使用goto这个关键字,但是也有一些类似于这个功能的操作,涉及到break和continue。

    goto语句的核心并不在于goto的跳转,而是在于标签,也就是”跳转到哪“

    标签就是后面跟有冒号的标识符,例如"label1:"

    在Java中,标签唯一的用处刚好是在迭代语句之前,也就是在标签和迭代语句之间插入任何的语句都是不合适的。理由是:我们希望在其中嵌套另外一个迭代或者一个开关。

    label1:
    outer-iteration{
        inner-iteration{
            //...
            break;//(1)
            //...
            continue;//(2)
            //...
            continue label1;//(3)
            //...
            break label1;//(4)
        }
    }

    (1)break中断了内部迭代,回到外部迭代

    (2)continue使执行点移回内部迭代的起始处

    (3)continue label1同时中断内部迭代和外部迭代,直接转到label1处继续执行,也就是从外部迭代进行接下来的过程

    (4)break label1也会同时中断内外两个迭代,并回到label1处,但是不会重新进入迭代,也就是完全终止两个迭代

    public class JavaLabel {
        public static void main(String[] args){
            int i = 0;
            //外部循环
            outer:
            for(;true;){
                //内部循环
                inner:
                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++;
                        break;
                    }
                    if(i == 7){
                        System.out.println("continue outer");
                        i++;
                        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;
                        }
                    }
                }
            }
        }
    }

    输出:

    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 label的写法可以用于跳出多层循环,continue label和正常的continue一样,会将循环的自增部分执行之后跳转到标签位置继续执行。

    public class LabeledWhile {
        public static void main(String[] args){
            int i = 0;
            outer:
            while (true){
                i++;
                System.out.println("i = " + i);
                if(i == 1){
                    System.out.println("continue");
                    continue;
                }
                if(i == 3){
                    System.out.println("continue outer");
                    continue outer;
                }
                if(i == 5){
                    System.out.println("break");
                    break;
                }
                if(i == 7){
                    System.out.println("break outer");
                    break outer;
                }
            }
        }
    }
    //输出结果
    //        i = 1
    //        continue
    //        i = 2
    //        i = 3
    //        continue outer
    //        i = 4
    //        i = 5
    //        break    

    上面的例子是label用于while循环的,原理同for例,为了确保自加能够执行,将i++放在了循环体的开头进行执行。

    总之,所谓goto有害的根本不是goto,而是标签,程序的标签变多会使程序的错误变多并且难以分析程序。但是Java的标签仅仅用于多层嵌套循环的跳出,这种限制语句能力的方法减少了由标签造成的问题。

    2.13上传 第四章读完

    P109

  • 相关阅读:
    String的转换问题
    springmvc maven搭建一
    top 使用心得
    spring 之AOP 和继承方法
    xml语法
    tomcat 相关
    json之注意
    javaScript 中创建json/转换字符串为json
    java基础之继承
    vim复制,删除
  • 原文地址:https://www.cnblogs.com/aLieb/p/14399194.html
Copyright © 2011-2022 走看看