疯狂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是最为灵活的, ...
随机推荐
- ios之block笔记
目测和函数指针基本类似用法,贴个hello world,备用 typedef int (^TestBlock)(int val1,int val2); __block ;//这里加__block是为了 ...
- 【FusionCharts学习-3】显示中国地图
概述 使用FusionCharts显示中国地图 资源获取 地图下载地址:http://www.fusioncharts.com/download/maps/definition/ 将下载的地图拷贝 ...
- Jsoncpp 使用方法大全
Json(JavaScript Object Notation )是一种轻量级的数据交换格式.简而言之,Json组织形式就和python中的字典, C/C++中的map一样,是通过key-value对 ...
- charles只获取指定的请求的设置方法
过滤网络请求 通常情况下,需要对网络请求进行过滤,只监控指定服务器的请求.有3种办法: 方法一:在主界面的中部的 Filter 栏中输入需要过滤出来的关键字.例如我们的服务器的地址(host)是:ww ...
- Java堆外内存之三:堆外内存回收方法
一.JVM内存的分配及垃圾回收 对于JVM的内存规则,应该是老生常谈的东西了,这里我就简单的说下: 新生代:一般来说新创建的对象都分配在这里. 年老代:经过几次垃圾回收,新生代的对象就会放在年老代里面 ...
- GC之五--SystemGC完全解读
目录: GC之一--GC 的算法分析.垃圾收集器.内存分配策略介绍 GC之二--GC日志分析(jdk1.8)整理中 GC之三--GC 触发Full GC执行的情况及应对策略 gc之四--Minor G ...
- shell 1基础
shell简介 shell是一个用C语言编写的程序,是用户使用Linux的桥梁.shell既是一种命令语言,又是一种程序设计语言. shell脚本(shell script),是一种为shell编写的 ...
- 第14章 UDP编程(3)_利用UDP实现广播功能
3. 广播的介绍 (1)广播 ①广播实现一对多的通信,如QQ群 ②它通过向广播地址发送数据报文实现的 (2)SO_BROADCAST选项 ①SO_BROADCAST选项控制着UDP套接字是否能发送广播 ...
- nginx-1.8.1的安装
1.我直接切换到root用户下安装,这里需要三个插件一起配套使用的 分别是: 1.gzip 模块需要 zlib 库 ( 下载: http://www.zlib.NET/ )2.rewrite 模块需要 ...
- python 之路之函数01
一 函数 1 那么要想学习函数,我们首先应该知道函数是什么? 我们这里所说的函数与数学中的函数是不同的概念,在这里我们可以把函数看成我们写代码过程中需要用到的工具. 2 那么这个‘工具’有什么 ...