疯狂JAVA——第四章 流程控制与数组
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——第四章 流程控制与数组的更多相关文章
- Python第四章-流程控制
流程控制 在以前的代码中,所有的代码都是交由 Python 忠实地从头执行到结束.但是这些远远不够.很多时候需要根据不同的情况执行不同的代码. 如果你想改变这一工作流程,应该怎么做? 就像这样的情况: ...
- Thing in java 第四章,控制执行流程,练习题答案
/** * Created by Sandy.Liu on 2018/7/19. * Thinking in java, version 4, chapter 4, practice 1 * Writ ...
- C#入门经典第四章-流程控制-1
布尔类型:
- Java基础之程序流程控制
Java中的程序流程控制 Java中的程序流程分为三种结构:①顺序结构:②分支结构:③循环结构 一.顺序结构 Java中定义成员变量的时候,采用的是前向引用,也就是后面的变量可以引用之前定义好的变量. ...
- Python第四天 流程控制 if else条件判断 for循环 while循环
Python第四天 流程控制 if else条件判断 for循环 while循环 目录 Pycharm使用技巧(转载) Python第一天 安装 shell 文件 Python第二天 ...
- Java基础语法(4)-流程控制
title: Java基础语法(4)-流程控制 blog: CSDN data: Java学习路线及视频 1.程序流程控制 流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定 ...
- Java基础语法02——流程控制
流程控制:顺序结构.分支结构(if-else.switch-case).循环结构(for.while.do-while)
- “全栈2019”Java第四章:创建第一个Java程序
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- Excel VBA入门(四)流程控制2-循环控制
所谓循环控制,即在循环执行一段代码,用于完成一些重复性任务. VBA中的循环控制语句主要有3种:for.while.loop.对于大多数人来说,for的使用频率最高,而我个人也觉得for是最为灵活的, ...
随机推荐
- Oracle 11G 单机asm安装
http://sugarlovecxq.blog.51cto.com/6707742/1702092/
- ThinkJava-多态
8.2.1 方法调用绑定 解决的办法就是后期绑定,它的含义就是在运行时根据对象的类型进行绑定.后期绑定也 叫做动态绑定或运行时绑定.如果一种语言想实现后期绑定,就必须具有某种机制,以便在运 行时能判断 ...
- app定位器带xpath的 uiautomatorviewer
参考文档:http://blog.csdn.net/kaka1121/article/details/53301517 在写脚本的过程中,总是遇到标签没有ID或者name等类似的唯一识别属性,为了能识 ...
- linux find grep组合使用
一.常用组合 1. 查找所有".h"文件 find /PATH -name "*.h" 2. 查找所有".h"文件中的含有"hel ...
- 定义function的层级
不知道标题拟的对不对,今天犯了个错误,图一是正确的写法. 图一 为了代码可以重复利用,我把其中两个方法独立出来,如图二. 图二 后来发现运行错误,说Gxrc未定义,百思不得其解,后来琢磨了好久,才发现 ...
- 浅谈在Java开发中的枚举的作用和用法
枚举(enum),是指一个经过排序的.被打包成一个单一实体的项列表.一个枚举的实例可以使用枚举项列表中任意单一项的值.枚举在各个语言当中都有着广泛的应用,通常用来表示诸如颜色.方式.类别.状态等等数目 ...
- osx 安装redis
brew install redis 想关文章 http://www.tuicool.com/articles/nM73Enr http://www.iteye.com/topic/1124400
- AVL树Python实现
# coding=utf-8 # AVL树Python实现 def get_height(node): return node.height if node else -1 def tree_mini ...
- Android SDK的安装与环境配置
一.Android SDK工具下载.安装 Android SDK工具下载:http://www.androiddevtools.cn/ SDK下载页面如下,由于电脑Windows系统所以下载的Wind ...
- Python之部分基础知识点汇总
1.三元运算(又称三目运算) 三元运算(又称三目运算),简单条件语句的简写 if a<b: A else: B等价于:A if a<b else B 2.