zoukankan      html  css  js  c++  java
  • 第四章 流程控制和数组

    4.4循环控制结构
     
    break 循环不仅可以结束其所在的循环,还可以直接结束外层循环,此时需要在break后跟个标签,用于标识外层循环。
     
    out:
      for(int i=0;i<3;i++)
      {
       for(int j=0;j<4;j++)
       {
        System.out.print("i="+i+"j="+j);
        if(j==2)
        break out;
       }
      }
     
    与break相似,continue也可以跟一个标签,用于直接结束标签标识循环的当次循环,重新开始下一次循环
    out:
      for(int i=0;i<3;i++)
      {
       for(int j=0;j<4;j++)
       {
        System.out.println("i="+i+"j="+j);
        if(j==2)
        continue out;
       }
      }
     
    return直接结束整个方法,不管在多少层循环内
     
    for(int i=0;i<3;i++)
       {
        for(int j=0;j<4;j++)
        {
         System.out.println("i="+i+"j="+j);
         if(j==2)
         return;
        }
       }
     
    4.5数组类型
     
    数组也是一种数据类型,本身是一种引用类型,如int[]是一种引用类型。
     
    type[] arrayname;
    定义一个引用类型,名字是arrayname
     
    数组一种引用类型的变量,定义一个变量时,仅仅表示一个引用变量,指针,不能使用,没有指向有效的内存空间,必须初始化之后才能使用。所谓初始化,就是为数组元素分配内存空间,并为每个数组元素赋初始值
     
     
    初始化两种方法:静态初始化,显式指定元素初始值
    动态初始化:只指定长度,系统分配初始值
     
     
    动态初始化和静态初始化不要同时使用,不要即指定数组长度,也为每个元素赋初始值
     
    foreach 语法:
    for(type variableName :array|collection)
    {
    }
     
    tpye数组元素或集合元素的类型,variable是形参
     
    String[] books={"englis","math"};    
      for(String book :books)
      {
       System.out.print(book);
      }
     
    注意:只能使用foreach遍历数组,但是不能用foreach改变变量值,因为如下程序中,最终的books[0]的值没有改变,那是因为foreach中的循环变量相当于一个临时变量,系统会把数组元素依次赋给这个临时变量,而这个临时变量不是数组元素,只是保存了数组元素的值,所以要希望改变数组元素的值,不能使用foreach循环
     
     
     
    String[] books={"englis","math"};
     
      for(String book :books)
      {
       book="water";
       System.out.println(book);
      }
      System.out.println(books[0]);
     
     

    4.6深入数组
    实际的数组元素被存在内存中,而数组引用变量是一个引用类型的变量,被储存在内存中。
     
    堆和栈
     
    一个方法执行,每个方法都有自己的内存栈,这个方法定义的变量将会放到这块栈内存中,方法结束,该方法内存栈也被销毁。
    创建一个对象,这个对象被保存到堆内存中,对象创建成本比较大,堆中的对象不会随方法的结束而销毁,即使方法结束,还可以被另一个引用变量所引用,只有当一个对象没有任何引用变量引用它是,系统的垃圾回收机制才会在合适的时候回收
     
    为了让垃圾回收机制回收一个数组所占的内存空间,可以将数据变量赋为null,也就切断了数据引用变量和实际数组之间的引用关系
     
     
    只要类型互相兼容,可以让一个数组变量指向另一个实际的数组,而不是数组长度可变的错觉
     
    看如下代码:
     
    似乎b的长度从4变为3,实际不是这样的,是栈内存中的b指向了堆内存中a指向的地址
     
     
     
     
    分析这个代码的执行过程:
     
    先在栈内存中定义一个数组变量 iArr
    动态初始化,在堆内存中开辟5个,初始化值为0,让IArr指向这5个内存
    最后在为每个数组元素依次赋值
     
     
     
     
    分析这个代码执行过程:
    1,先在栈内存中创建了一个数组变量students
    2,动态初始化,在堆内存中创建2个单位,person也是对象,所以初始化为null
    3,在栈内存中建立一个变量zhang
    4,在堆内存中一个person变量,赋值15,158
    5,6,同3,4
    7,堆内存中的students[0]指向堆内存中的person zhang对象
     
     
     
     
    java中虽然支持多维数组,但是从底层上看,没有多维数组,数组变量其实是一个引用,数组的引用再次指向真实的内存
     
    分析二维数据的执行过程:a[][],a数组当成一维数组来看,每个数组都指向一个引用类型。
     
     
    ??不太懂java中可以int[][][]扩展成三维数组嘛?回答不可以!
     
     
     
     
    操作array的一些工具类
    主要:
    1,搜索某个值在数组中出现的位置
    int binarySearch[type []a,type key]
    要求数组按序排列
    2,type[]copyOf(type[]original,int newlengeh)把original数组复制成一个新数组
    3,boolean equals(type[] a,type[]b)只有当两个数组长度和对应的元素一一相等
    4,void fill(type[]a,type val)把a数组所有元素都赋值为val
    5,将数组进行排序
    void  sort(type[]a)
    6,String toString(type[]a)将一个数组转化为字符串
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    ZOJ Problem Set–2417 Lowest Bit
    ZOJ Problem Set–1402 Magnificent Meatballs
    ZOJ Problem Set–1292 Integer Inquiry
    ZOJ Problem Set–1109 Language of FatMouse
    ZOJ Problem Set–1295 Reverse Text
    ZOJ Problem Set–1712 Skew Binary
    ZOJ Problem Set–1151 Word Reversal
    ZOJ Problem Set–1494 Climbing Worm
    ZOJ Problem Set–1251 Box of Bricks
    ZOJ Problem Set–1205 Martian Addition
  • 原文地址:https://www.cnblogs.com/shipskunkun/p/4343627.html
Copyright © 2011-2022 走看看