当前课程知识点:Java程序设计 >  第一章 Java语言基础知识 >  1.3-数组 >  1.3.1-数组

返回《Java程序设计》慕课在线视频课程列表

1.3.1-数组在线视频

1.3.1-数组

下一节:1.4.1-算法的流程控制

返回《Java程序设计》慕课在线视频列表

1.3.1-数组课程教案、知识点、字幕

大家好

欢迎回来继续学习

java语言程序设计

这一节我们来学习数组

数组在所有高级语言里面都有

这个概念大家也很熟悉了

但是java的数组

还是很有些特色的

首先我们来看一下数组的概念

从概念上来讲

不管你用哪种语言来写程序

那么数组都是由同一类型的对象

或者基本类型的数据构成的

那么这些对象

或者基本类型的数据

都被封装在同一个标志符

也就是数组名下面

比如说我们这里列出的

这一列数据都是整数

它就可以构成一个

一维的整数类型的数组

在java中数组是对象

那么数组它是需要动态初始化的

这一点需要大家注意

我们接下来下一章

会讲到类与对象

现在大家先简单的理解

java的数组它比较特殊

不是跟其它的

面向过程的高级语言一样

我们这样定义数组

马上数组就存在了

所以它是先定义数组的名字

或者叫引用

然后用动态的方式

去分配内存空间

然后初始化的

那么由于数组是对象

而在java中

所有类的最顶上的超类

就是Object

这个在后面我们讲

类的继承的时候

会给大家详细介绍

现在先让大家知道

数组对象可以赋值给

Object类型的对象

那么在数组中我

我们可以调用Object类

所提供的所有方法

现在我先简单的把概念

这样给大家介绍到这

后面我们还有专门的章节

会给大家演示

怎么样用Object类里面的

定义的这些方法的

那么有一个成员变量

我们现在就可以开始用

就是数组的长度

每个数组都有一个成员变量

叫做长度length

我们用它就可以知道

数组里面有多少个元素了

数组中的变量

也就是构成数组的

一个一个的数据

我们称它为数组元素

数组是没有名字的

我们访问数组元素

就要通过数组名

和下标来访问

接下来我们就来看看

在java中怎么创建

和使用一个数组

在java中创建跟使用个数组

还是挺麻烦的 有好多步

首先要声明指向数组的引用

也就是声明一个数组名吧

简单这么理解

接下来要用动态内存分配的方式

去构造一个数组

然后给数组初始化

接下来最后才是

我们可以使用

这个数组里面的元素了

好我们要定义数组

那么第一步就是声明数组的引用

引用是什么呢

可以说在java里面

除了基本数据类型

我们定义一个变量

它同时就分配内存空间以外

当我们要定义一个对象的时候

都是声明对象的引用

然后用动态内存分配的方式

得到这个对象的内存空间

并且给它初始化

然后把对象

和这个引用名关联起来

让它形成对象名

这是java的方式

开始的时候

大家可能还有些不习惯

或者说不理解 没关系

我们这一学期都是在这样用

大家后面逐渐就会习惯理解了

那么数组的引用

很类似于在C语言中的

数组的首地址那个指针

其实引用和指针

是有某种内在联系的

虽然在java中没有指针

但是处处有引用

好 第一步我们先声明

数组的引用

我们声明数组引用的时候

仅仅就是声明一个名字

这个时候是无需指明

数组元素个数的

也不为数组元素分配内存空间

声明完了引用名以后

如果没有构造数组

那么是不能直接使用着引用的

这引用是个空引用

现在我们看看这例子

如果我们想定义一个数组

可以先定义它的引用名

比如说arrayName

前面我们用Type

表示它是某种类型

比如说int类型

定义一个int类型的名字

intArray

那么我们可以将这一对方括号

写在类型名之后

引用变量名之前

也可以将这对方括号

写在引用名之后

效果是一样的

它们都表示

我们定义了一个数组名

它仅仅是个名字

数组在哪呢 还没有呢

那么接下来下一步的任务

就是要真正的创建一个数组

用动态内存分配的方法

我们创建数组

要用关键字new

它表示在运行时

动态分配内存空间

用于创建一个新的数组

那么在这个时候

我们是可以指定数组的类型

和数组元素的个数的

元素个数可以是常量

也可以是变量

这一点是很特殊的

为什么呢

因为它是运行时动态创建的

那只要这个时候

变量已经取得值了

当然用变量来指明

我们要多少个元素

是没有问题的

那么基本类型的数组的每个元素

都是一个基本类型的变量

而引用类型的数组

它每个元素都是一个对象的引用

比如说我们在这里

创建一个数组

首先我们定义一个名字

比如说ai

将来会用于存放一个

整数数组的引用

这样定义完了ai只是个名字

接下来我们再用new

去分配内存空间

构造一个数组

然后将数组的引用赋给ai

从这个时候起

ai就成了数组的名字了

同样下一个数组s

也是这样构造出来的

那么我们也可以

将数组的声明和数组的构造

一起来执行

比如说我们在定义ai的时候

就马上用new

去动态分配一个int数组

把引用用来初始化ai

这也是可以的

那么我们可以在一条语句中

创建多个数组也行

比如说最下面这一行的例子

那我们在一条语句

创建两个数组 s1 s2

这都是可以的

前面例子中我们创建了数组

但是都没有给数组的元素

进行初始化

我们知道定义变量的时候

给变量进行初始化

是一个很好的编程习惯

那么在java里面

包括基本类型的单个变量

包括数组

如果你定义的时候

不给它初始化会怎么样呢

java里面的数据

如果你构造的时候

定义的时候不给它初始化

它里面不会有垃圾数据的

基本类型的数据

那么数值型的数据

都会自动初始化为零

引用类型的变量

会初始化为空引用

那么数组构造的时候

怎么对它进行初始化

我们来看一下

数组初始化的方式

对数组进行初始化

就是对数组的元素的值

进行初始化

我们可以简单的

把几个步骤合在一起

我们在声明数组名的时候

就列出数组元素的全部初始值

那这个时候数组引用名的声明

数组的构造和元素的初始化

这几个步骤就合一了

一起完成了

那么刚才说了

如果创建数组的时候

你没有指定初始值

那么基本类型的数据

默认初始值为零

boolean类型的数据

默认初始值为false 是假

那引用类型的元素

默认初始值就是空

那数组在构造初始化之后

当然我们也可以用赋值

或者其它的运算

去改变数组的元素值

当我们完成了数组名的声明

数组的构造

元素的初始化之后

我们就可以使用这个数组了

使用数组一般来说

都是单独的使用

一个个的数组元素

那么这种数组元素的引用

和使用方式

其实跟我们在C语言中

学过的方式基本上就是一样的了

我们要引用数组的一个元素

就要用数组名

方括号下标的方式

注意数组的下标

它本质上必须整数的类型

可以是基本整型 短整型

单字节的整数 或者是字符型

那数组的下标计数

是从零开始的

数组一共有多少个元素呢

这个数组的元素个数

叫做数组的长度

既然在java里面

数组它是一个对象

而且它有一个数据成员

叫做length长度

这样我们就可以用

对象(名点)成员名的方式

来得到数组的长度了

那数组的最大下标值

就是它的长度减一

当我们访问数组的时候

如果数组的下标越界了

会怎么样呢

java语言的数组是很安全的

如果你在运行过程中

数组下标越界了

那么程序立刻会产生

数组越界异常

这时候你程序就会中止了

所以不会任由数组越界

去产生什么不可确定的结果

在java中数组名它就是一个引用

或者说它就是一个名字

怎么理解这一点呢

接下来我们来看看这个例题

在这个例题中

我们定义了一个数组a1

在定义的时候就给它初始化了

由于你给出了初始化列表

所以我们刚才说了

这种情况下几个步骤就合一了

不仅声明了名字a1

而且构造了一个

实实在在的数组

而且数组的每个元素

都初始化了

那么这个数组的长度是多少呢

由于我们给出的五个初始值

于是它的长度自然就是5

接下来下面一行

我们又定义了一个a2

这个a2没有给它初始化

那么实际上它就是

定义了一个引用

a2就是一个名字

可以这么理解

好 接下来我们将a1赋值给a2

这个赋值意味着什么

我们回忆一下

C语言中学过的

指针与指针之间的赋值

这个很像

这个是引用与引用之间的赋值

并没有复制出一个数组来

只是把数组名a1

或者叫做引用a1

赋值给了引用a2

像这样赋值以后

a1 a2这两个引用

指向了同一个数组

接下来我们做一下试验

用一个for循环

将a2这个数组的每个元素都加一

这样改变以后

我们再用下一个循环

将a1数组里面的每个元素

都输出一遍

结果看到a1数组的元素变了

说明你通过a2这个引用名

去修改数组

那么再通过a1这个引用名

去访问数组

实际上你操作的

都是同一个数组

同一个数组的两个名字

说穿了就这个意思

当然这里面我们用到了

循环语句 for语句

稍候我马上给大家讲

如果没有学过C语言的同学

可能看不懂这个for语句是什么

学过C语言的同学

你会看到它跟C语言的

for语句是一样的

接下来下面这个程序段

演示了一个字符串引用

构成的数组

也就是说它的每个元素

都是一个引用

这里我们定义这个

String类型的一个数组

anArray

然后在它的初始化列表里面

列出了三个字符串

双引号里面的String One

String Two String Three

三个字符串

然后我们用一个for循环

将数组里面的每个元素输出一下

并且调用toLower

这个方法

把字符串里面的字符

都转成小写输出

我们看到了输出结果

那么这个就是一个

由字符串引用构成的数组

我们在刚才例子中看到了

数组名就是一个数组的引用

我们把一个数组名

复制给另外一个数组名

只是一个引用之间的赋值

赋值完了以后

数组并没有产生一个副本

而是两个引用

指向了同一个数组

那么如果我们真正想

复制一个数组出来

该怎么办呢

我们来看这个图

比如说我们想做的是

从第一个数组里面

选取一部分元素

连续的一段元素

复制到一个新的数组中

那我们怎么办

这个时候我们可以用

arraycopy这个方法

关于类的方法

我们也会在第二章的时候

就会给大家介绍

讲类与对象的时候就会介绍

现在看起来

我们就简单的理解

它很像C语言中的函数

但是函数可以是全局的独立的

而java里面没有函数

它的这样的小的功能模块

都作为类的方法出现在类里面

那我们可以用

arraycopy这个方法

去进行数组的全部

或者部分的复制

这个例子我们就来演示一下

怎么样复制数组的全部元素

或者是部分元素

在这个例子里面

我们复制部分元素

在这里我们定义了两个数组

一个copyFrom

定义了

并且它的元素都被初始化了

第二个数组是copyTo

我们给它分配了内存空间

但是没有进行初始化

接下来我们希望

进行数组元素的复制

复制一段数组元素

我们就可以使用

System的这个arraycopy方法

好 那arraycopy方法

我们看它的参数

第一个参数copyFrom

你从哪个数组复制过来

从那个数组的

下标为几的元素开始复制

然后复制到哪去

复制到它的目标数组中的

什么位置

比如说下标为零的位置

一共复制多少个字符

这样就完成了复制了

复制以后我们可以再输出一下

copyTo这个数组验证一下

那么输出copyTo数组的时候

我们看如果是在C语言中

我们直接可以拿字符数组

当字符串来用

直接输出字符数组就行了

但java里面

字符数组不能当字符串用

这里是用字符数组作为初始值

作为参数

去构造了一个String对象

然后输出了这个String对象

来验证

大家也可以回去运行

验证一下这个程序

我们刚才讲的例子

都是一维数组 比较简单

我们还知道

经常我们在程序中

是需要多维数组的对吧

那么在java中

怎么定义多维数组呢

接下来我就以二维数组为例

来给大家介绍多维数组

怎么样构造 怎么样使用

比如说我们有一章

这样的有行有列的表格

是这些编号为0123456的

这些学生

每一周的这个测验成绩

这样有行有列

整整齐齐的一张表

这张表在程序中怎么表示呢

显然我们会想到

用二维数组来表示

所以我们可以定义一个

二维数组来表示

这样一个二维表格

这在其它的高级语言中

也是这样的思路

在java中

我们声明和构造二维数组

可以有多种方式

第一种方式

我们先声明一个二维数组名

像这样声明以后

myArray就是一个

指向二维数组的这个引用

那么它的初始值是什么呢

是个空引用

什么数组也没指向

那你要需要有数组

你接下来要用new

去构造一个数组

然后把引用赋值给它

也可以用第二种方式

我们在声明这个

二维数组引用名的时候

同时就用new去分配内存空间

构造一个新的数组

并且将数组的引用给到

或者说初始化到

myArray这个引用名里面去

但是这个数组的空间有了

它里面的值可是没有初始化

这时候它的值是什么呢

都是0

因为int类型的数组

每个元素都是int

不初始化的话

它默认初始化为0

那么第三种方式

就把几个步骤合一了

声明这个二维数组引用名的时候

同时就给出了全部数据的初始值

这样的话引用名的声明

数组的构造 元素的初始化

几个步骤一下都完成了

那么接下来

我们再看这么一个例子

这个例子想给大家演示一下

二维数组的长度这个问题

我们先想一想

如果我们说到二维数组的长度

它应该指的是什么呢

在java里面很特殊

java里面二维数组的长度

指的就是它的行数

而不是它的全部元素个数

而每一行又有自己的长度

java里面的二维数组

它的每一行长短可以不一样的

比如说我们再定义为一个数组

名字叫uneven

看我们初始化的情况

第0行 下标为0的这一行

是三个初始值

那么也有自动的

它生成了这一行的长度是3

就0行的长度是3

1行它的长度是多少呢

我们给了两个初始值

它的长度就是2

那么2行它的长度是多少呢

长度是5

所以我们在这程序里面

首先我们先输出下

eneven.length

就是整个数组的长度是几

从运行结果我们可以看到是3

接下来再输出每一行的长度

也就是每一行的列数

每一行的元素个数

012这些行

它们的长度并不相同

分别是325

从这一点我们深刻的体会到

java的二维数组

就是由一维数组构成的数组

应该说我们学C语言的时候

老师也是这样讲的

怎么理解二维数组呢

它就是由一维数组

构成的数组

而java里面的二维数组

我们看到

真真正正是由一维数组

构成的数组

在这一节我们学习了

java语言的数组

可以说从数据结构的概念上来看

java的数组

跟其它高级语言中的数组

应该是一样的

但是在语法上还是很特别的

java的数组

跟我们以前大多数同学学过的

C语言的数组差别非常大

这一点需要大家特别注意

接下来下一章

我要给大家介绍流程控制

这个跟我们在C语言中

学到的基本是一样的

Java程序设计课程列表:

第一章 Java语言基础知识

-1.0-导学

--1.0-导学

--JDK的安装与配置01

--JDK的安装与配置02

--JDK的安装与配置03

--编辑并执行第一个java程序01

--编辑并执行第一个java程序02

--编辑并执行第一个java程序03

--eclipse的安装和配置01

--eclipse的安装和配置02

--eclipse的安装和配置03

--使用eclipse进行Java的开发01

--使用eclipse进行Java的开发02

--使用eclipse进行Java的开发03

-1.1-Java与面向对象程序设计简介

--1.1.1 Java与面向对象程序设计简介

--第一章 Java语言基础知识--1.1-Java与面向对象程序设计简介

-1.2-基本数据类型与表达式

--1.2.1-基本数据类型与表达式

-第一章 Java语言基础知识--1.2-基本数据类型与表达式

-1.3-数组

--1.3.1-数组

-第一章 Java语言基础知识--1.3-数组

-1.4-算法的流程控制

--1.4.1-算法的流程控制

--第一章 Java语言基础知识--1.4-算法的流程控制

-1.5-第一章小结

--1.5.1-第一章小结

-第一章编程练习题

-课件

--外部链接

第一章续-习题讲解视频

-Java环境配置、Eclipse使用、Helloworld程序详解

--JAVA的安装和配置

--编写并执行第一个Java程序及Java的跨平台性

--eclipse的安装和配置

--使用eclipse建立Java项目、编写和运行Java程序

--Java注释和Eclipse中的注释操作

--详解HelloWorld程序

-Java数据类型

--Java数据类型介绍

--Java整数类型

--Java浮点类型

--Java字符类型和布尔类型

--数据类型实战

--数据类型转换

--Java强制类型转换精度损失示例与表达式中的数据类型转换

-Java数组

--Java数组介绍、声明与使用

--一维数组的初始化与length属性

--数组索引的原理与使用

--二维数组的介绍与使用

-Java变量

--Java的变量

-命令行参数

--命令行参数的介绍

第二章 类与对象

-2.0-导学

--2.0-导学

-2.1-面向对象方法的特性

--2.1-面向对象方法的特性

--第二章 类与对象--2.1-面向对象方法的特性

-2.2-1-类声明与对象创建

--2.2-1-类声明与对象创建

--第二章 类与对象--2.2-1-类声明与对象创建

-2.2-2-数据成员

--2.2-2-数据成员

--第二章 类与对象--2.2-2-数据成员

-2.2-3-方法成员

--2.2-3-方法成员

--第二章 类与对象--2.2-3-方法成员

-2.2-4-包

--2.2-4-包

--第二章 类与对象--2.2-4-包

-2.2-5-类的访问权限控制

--2.2-5-类的访问权限控制

--第二章 类与对象--2.2-5-类的访问权限控制

-2.3-1-对象初始化

--2.3-1-对象初始化

--第二章 类与对象--2.3-1-对象初始化

-2.3-2-内存回收

--2.3-2-内存回收

--第二章 类与对象--2.3-2-内存回收

-2.4-枚举类

--2.4-枚举类

--第二章 类与对象--2.4-枚举类

-2.5-应用举例

--2.5-应用举例

-2.6-第2章小结

--2.6-第2章小结

-第二章编程练习题

-课件

--第二章课件

第三章 类的重用

-3.0-导学

--3.0-导学

-3.1.1-3.1.2-类继承的概念和语法

--3.1.1-3.1.2-类继承的概念和语法

--第三章 类的重用--3.1.1-3.1.2-类继承的概念和语法

-3.1.3-隐藏和覆盖

--3.1.3-隐藏和覆盖

--第三章 类的重用--3.1.3-隐藏和覆盖

-3.2-Object 类

--3.2-Object 类

--第三章 类的重用--3.2-Object 类

-3.3-终结类与终结方法

--3.3-终结类与终结方法

--第三章 类的重用--3.3-终结类与终结方法

-3.4-抽象类

--3.4-抽象类

--第三章 类的重用--3.4-抽象类

-3.5-泛型

--3.5-泛型

--第三章 类的重用--3.5-泛型

-3.6-类的组合

--3.6-类的组合

-3.7-小结

--3.7-小结

-第三章编程练习题

-课件

--课件

第四章 接口与多态

-4.0-导学

--导学

-4.1-接口

--接口

--第四章 接口与多态--4.1-接口

-4.2.1-4.2.2-类型转换

--类型转换

--第四章 接口与多态--4.2.1-4.2.2-类型转换

-4.2.3-方法的查找

--方法的查找

--第四章 接口与多态--4.2.3-方法的查找

-4.3-多态的概念

--多态的概念

--第四章 接口与多态--4.3-多态的概念

-4.4-多态的应用举例

--多态的应用举例

--第四章 接口与多态--4.4-多态的应用举例

-4.5-构造方法与多态性

--构造方法和多态性

--第四章 接口与多态--4.5-构造方法与多态性

-4.6-本章小结

--本章小结

-第四章编程作业

-课件

--课件

第五章 输入输出

-5.0-导学

--5.0-导学

-5.1.1-5.1.2-异常处理的概念

--5.1.1-5.1.2-异常处理的概念

--第五章 输入输出--5.1.1-5.1.2-异常处理的概念

-5.1.3-5.1.5-异常的处理

--5.1.3-5.1.5-异常的处理

--第五章 输入输出--5.1.3-5.1.5-异常的处理

-5.2-输入输出流的概念

--输入输出流的概念

--第五章 输入输出--5.2-输入输出流的概念

-5.3.1-写文本文件

--写文本文件

--第五章 输入输出--5.3.1-写文本文件

-5.3.2-读文本文件

--读文本文件

--第五章 输入输出--5.3.2-读文本文件

-5.3.3-写二进制文件

--写二进制文件

--第五章 输入输出--5.3.3-写二进制文件

-5.3.4-读二进制文件

--读二进制文件

-5.3.5-File类

--File类

-5.3.6-处理压缩文件

--处理压缩文件

-5.3.7-对象序列化

--对象序列化

-5.3.8-随机文件读写

--随机文件读写

-5.4-本章小结

--本章小结

-课件

--课件

第六章 对象群体的组织

-6.0-导学

--导学

-6.1-Java集合框架介绍

--Java集合框架介绍

--第六章 对象群体的组织--6.1-Java集合框架介绍

-6.2-主要接口及常用的实现类

--6.2-主要接口及常用的实现类

--第六章 对象群体的组织--6.2-主要接口及常用的实现类

-6.3-常用算法

--常用算法

-6.4-数组实用方法

--6.4-数组实用方法

-6.5-基于动态数组的类型(Vector, ArrayList)

--基于动态数组的类型(Vector, ArrayList)

-6.6-遍历Collection

--遍历Collection

-6.7-Map接口及其实现

--Map接口及其实现

-6.8-第6章小结

--第6章小结

-课件

--课件

第七章 图形用户界面

-7.0-导学

--导学

-7.1-绘图

--绘图

-7.2-Swing基础

--Swing基础

-7.3-Swing的层次

--Swing的层次

-7.4-布局管理

--布局管理

-7.5-内部类

--内部类

-7.6-事件处理的基本概念

--事件处理的基本概念

-7.7-事件派发机制

--事件派发机制

-7.8-顶层容器

--7.8-顶层容器

-7.9-中间层容器(一)

--7.9-中间层容器(一)

-7.10-中间层容器(二)

--7.10-中间层容器(二)

-7.11-原子组件(一)

--7.11-原子组件(一)

-7.12-原子组件(二)

--7.12-原子组件(二)

-7.13-原子组件(三)

--7.13-原子组件(三)

-7.14-其它Swing特性

--7.14-其它Swing特性

-7.15-第7章小结

--7.15-第7章小结

-课件

--课件

1.3.1-数组笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。