4.5 数组类型

数组也是一种类型。它本身是引用类型。例如int是一种基本类型,int[]就是引用类型。

两种定义数组的方式:

  1.type[] arrayName;

  2.type arrayName[];

通常推荐第一种写法,这种方法既容易理解,也符合定义变量的语法。

如果访问数组元素时指定的索引值小于0,或者大于等于数组的长度,编译程序不会出现任何错误,但运行时会抛出异常

4.5.5foreach循环

String[] books={"三国演义","西游记","红楼梦"};
for (String book:books)
{
System.out.println(book);
}

但是有一点,使用foreach来迭代数组元素时,foreach中的循环变量相当于一个临时变量,系统会把数组元素一次赋给这个临时变量,而这个临时变量并不是数组元素,它只保存了数组元素的值,因此,如果希望改变数组元素的值,则不能使用foreach循环。

4.6深入数组

实际数组对象被存储在堆(heap)内存中;如果引用该数组对象的数组引用变量是一个局部变量,那么它被存储在栈(stack)内存中。具体示意图看课本P92.

当一个方法执行时,每个方法都会建立自己的内存栈,在这个方法内定义的变量将会逐个放入这块内存栈中,随着方法的执行结束,这个方法的内存栈也将自然销毁。因此所有在方法中的局部变量都要放在栈内存中的;在程序中建立一个对象时,这个对象将被保存到运行时数据区中,以便反复利用(因为对象的建立成本比较大),这个运行时数据区就是堆内存。堆内存对象不会随方法的结束而销毁,即使方法结束后,这个对象还可能被另一个引用变量所引用(在方法参数传递时很常见),则这个方法依然不会销毁,只有当一个对象没有任何引用类型引用它时,系统的垃圾回收机器才会在合适的时候回收它。

int []  a={5,7,20};
int [] b=new int[4];
b=a;

上边程序的实际上是a=b={5,7,20};

注意此处:不是把a数组的内容给了b,而是把a的地址给了b,现在a和b都指向那个{5,7,20}的数组。第二个数组失去了引用,变成了垃圾,只有等垃圾回收机制来回收它。具体示意图看课本p93

一定要把数组看成两部分:一个部分时数组的引用,也就是代码中定义的数组引用变量;还有一部分是实际的数组对象,这部分是在堆内存里运行的,通常无法直接访问到它,只能通过数组引用变量来访问它。

4.6.4没有多维数组

type[][] arrName类似于二维数组,实质上还是一维数组,只是其数组元素也是引用,数组元素里保存的引用指向一维数组。

但是要注意的是,不可以用这个方法生成三维四维以致更高的维度。比如int [][]  a;前边我们已经说过了,int[]是一种类型,那么这个数组表明数组a中存放的是int[]类型的数据。如果要定义多维数组,可以定义一个Object[]类型的数组,这个数组的元素是Object类型的数组,合格数组元素可以再次指向一个Object[]类型的数组,这样就可以从一维数组扩展到二维数组、三维数组……

java提供的Array类里包含的一些static修饰的方法可以直接操作数组,这个Arrays类里包含了一些static修饰的方法:

int binarySearch(type[] a,type key):使用二分法查询key元素值在a数组中出现的索引;如果a数组不存在,则返回负数。要数组元素已经按照升序排列。

还有一些并行工具方法,充分利用多cpu并行能力来提高设值和排序的能力:

void parallelSort(xxx[] array):排序

疯狂JAVA——第四章 流程控制与数组的更多相关文章

  1. Python第四章-流程控制

    流程控制 在以前的代码中,所有的代码都是交由 Python 忠实地从头执行到结束.但是这些远远不够.很多时候需要根据不同的情况执行不同的代码. 如果你想改变这一工作流程,应该怎么做? 就像这样的情况: ...

  2. Thing in java 第四章,控制执行流程,练习题答案

    /** * Created by Sandy.Liu on 2018/7/19. * Thinking in java, version 4, chapter 4, practice 1 * Writ ...

  3. C#入门经典第四章-流程控制-1

    布尔类型:

  4. Java基础之程序流程控制

    Java中的程序流程控制 Java中的程序流程分为三种结构:①顺序结构:②分支结构:③循环结构 一.顺序结构 Java中定义成员变量的时候,采用的是前向引用,也就是后面的变量可以引用之前定义好的变量. ...

  5. Python第四天 流程控制 if else条件判断 for循环 while循环

    Python第四天   流程控制   if else条件判断   for循环 while循环 目录 Pycharm使用技巧(转载) Python第一天  安装  shell  文件 Python第二天 ...

  6. Java基础语法(4)-流程控制

    title: Java基础语法(4)-流程控制 blog: CSDN data: Java学习路线及视频 1.程序流程控制 流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定 ...

  7. Java基础语法02——流程控制

    流程控制:顺序结构.分支结构(if-else.switch-case).循环结构(for.while.do-while)

  8. “全栈2019”Java第四章:创建第一个Java程序

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  9. Excel VBA入门(四)流程控制2-循环控制

    所谓循环控制,即在循环执行一段代码,用于完成一些重复性任务. VBA中的循环控制语句主要有3种:for.while.loop.对于大多数人来说,for的使用频率最高,而我个人也觉得for是最为灵活的, ...

随机推荐

  1. Oracle 11G 单机asm安装

    http://sugarlovecxq.blog.51cto.com/6707742/1702092/

  2. ThinkJava-多态

    8.2.1 方法调用绑定 解决的办法就是后期绑定,它的含义就是在运行时根据对象的类型进行绑定.后期绑定也 叫做动态绑定或运行时绑定.如果一种语言想实现后期绑定,就必须具有某种机制,以便在运 行时能判断 ...

  3. app定位器带xpath的 uiautomatorviewer

    参考文档:http://blog.csdn.net/kaka1121/article/details/53301517 在写脚本的过程中,总是遇到标签没有ID或者name等类似的唯一识别属性,为了能识 ...

  4. linux find grep组合使用

    一.常用组合 1. 查找所有".h"文件 find /PATH -name "*.h" 2. 查找所有".h"文件中的含有"hel ...

  5. 定义function的层级

    不知道标题拟的对不对,今天犯了个错误,图一是正确的写法. 图一 为了代码可以重复利用,我把其中两个方法独立出来,如图二. 图二 后来发现运行错误,说Gxrc未定义,百思不得其解,后来琢磨了好久,才发现 ...

  6. 浅谈在Java开发中的枚举的作用和用法

    枚举(enum),是指一个经过排序的.被打包成一个单一实体的项列表.一个枚举的实例可以使用枚举项列表中任意单一项的值.枚举在各个语言当中都有着广泛的应用,通常用来表示诸如颜色.方式.类别.状态等等数目 ...

  7. osx 安装redis

    brew install redis 想关文章 http://www.tuicool.com/articles/nM73Enr http://www.iteye.com/topic/1124400

  8. AVL树Python实现

    # coding=utf-8 # AVL树Python实现 def get_height(node): return node.height if node else -1 def tree_mini ...

  9. Android SDK的安装与环境配置

    一.Android SDK工具下载.安装 Android SDK工具下载:http://www.androiddevtools.cn/ SDK下载页面如下,由于电脑Windows系统所以下载的Wind ...

  10. Python之部分基础知识点汇总

    1.三元运算(又称三目运算) 三元运算(又称三目运算),简单条件语句的简写    if a<b: A    else: B等价于:A if a<b else B 2.