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

  • 相关阅读:
    The Quad
    将OrCAD Capture CIS的设计文件(.dsn)导入到PADS Logic VX.2.3
    OrCAD Capture CIS 16.6 将版本16.6的设计文件另存为版本16.2的设计文件
    Eclipse IDE 添加jar包到Java工程中
    PADS Logic VX.2.3 修改软件界面语言
    切换Allegro PCB Editor
    Allegro PCB Design GXL (legacy) 将brd文件另存为低版本文件
    Allegro PCB Design GXL (legacy) 设置自动保存brd文件
    Could not create an acl object: Role '16'
    windows 下apache开启FastCGI
  • 原文地址:https://www.cnblogs.com/aLieb/p/14399194.html
Copyright © 2011-2022 走看看