一维数组:

数组的定义:数组是指一组类型相同的数据的集合,数组中的每个数据被称作元素。

 

特点:

1.数组可以存放任意类型的元素,但同一个数组里存放的元素类型必须一致。是一个对象,是一种引用数据类型。可以表示一组数据的集合。
2:数组只能保存一种类型的数据。
3:数组创建后元素默认有初始值。

Java 数组中 是否存在 java数组中的元素_java


4:数组中的每一个数据称为 元素 element。元素是在堆内存中分配的。而且是连续分配的。

5:数组的每一个元素都有一个序号,专业的称谓:下标、索引、角标。下标是从0开始的、升序的、连续的、0序的。

6:数组有一个属性:长度的属性,表示数组中元素的个数 该属性是 int 类型。 通过 数组名.length 来访问该属性。

7:数组中元素的下标的取值范围是:[0~length-1]。

8:通过new 关键字 在堆内存中元素被分配空间之后。每个元素被jvm 赋予默认值。

默认值规则:整数:0 浮点数:0.0 char:’\u0000’ boolean:false 引用数据类型:null。

9: 数组的每个元素通过 数组名[下标] 来访问。每个元素都是一个变量。和变量的用法一致。

10:数组变量、数组引用 保存的是 数组的实际元素的在堆内存中的"首地址"。

11: [] 代表的是 数组这种类型。

12:求下标是 n 的元素的地址:首地址+元素字节数*n。 数组根据下标访问元素的效率非常快。

13:数组的长度可以是 0,但是不能是 负数。

14:数组的长度一旦确定,就不能更改了。数组是定长的。

数组不进行初始化,系统默认初始化,不同类型数组元素的默认值如下表:

Java 数组中 是否存在 java数组中的元素_数组名_02


定义数组的方式有两种:

动态初始化: 

1.先声明数组再创建数组

数据类型[] 数组名;//声明数组

数组名 =  new 数据类型[长度];//创建数组

2.//声明数组并创建数组

数据类型[] 数组名 = new 数据类型[长度];

代码演示:

Java 数组中 是否存在 java数组中的元素_java_03

静态初始化:

1.类型[] 数组名 = new 类型[]{元素,元素,……};

2.类型[] 数组名 = {元素,元素,元素,……};

代码演示:

Java 数组中 是否存在 java数组中的元素_数组名_04

上述代码中,采用静态初始化的方式为每个元素赋予初值,其值分别是1、2、3、4。需要注意的是,文件中的第3行代码千万不可写成int[] x = new int[4]{1,2,3,4};,这样写编译器会报错。原因在于编译器会认为数组限定的元素个数[4]与实际存储的元素{1,2,3,4}个数有可能不一致,存在一定的安全隐患。

栈内存和堆内存的定义:

在方法中定义的一些基本类型的变量对象的引用变量都在方法的栈内存中分配,当在一段代码块中定义一个变量时,Java就在栈内存中为这个变量分配内存空间,当超出变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立刻被另作他用。

堆内存用来存放由 new 运算符创建的数组或对象,在堆中分配的内存,由Java虚拟机的垃圾回收器来自动管理。在堆中创建了一个数组或对象后,同时还在栈中定义一个特殊的变量,让栈中的这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量,引用变量实际上保存的是数组或对象在堆内存中的首地址(也称为对象的句柄),以后就可以在程序中使用栈的引用变量来访问堆中的数组或对象。

图例:

Java 数组中 是否存在 java数组中的元素_堆内存_05

 栈内存和堆内存的区别:

栈内存归属于单个线程,每个线程都会有一个栈内存,其存储的变量只能在其所属线程中可见,即栈内存可以理解成线程的私有内存。
而堆内存中的对象对所有线程可见。堆内存中的对象可以被所有线程访问。

使用数组:

1.访问数组元素:数组名(索引)

2.给数组元素赋值:数组名【索引】=值;

常见错误:

1.数组下标越界异常:ArrayIndexOutOfBoundsException

2.空指针异常:NullPointerException

了解异常:所谓异常指程序中出现的错误,他会报告出错的异常类型、出错的行号以及出错的原因。

数组的常见操作:

1.数组遍历

在操作数组时,经常需要依次访问数组中的每个元素,这种操作称作数组的遍历。接下来通过一个案例学习如何使用for循环遍历数组。

Java 数组中 是否存在 java数组中的元素_堆内存_06

 2.数组最值

在操作数组时,经常需要获取数组中元素的最值。接下来通过一个案例来演示如何获取数组中元素的最大值。

3.数组排序

在操作数组时,经常需要对数组中的元素进行排序。下面为读者介绍一种比较常见的排序算法——冒泡排序。在冒泡排序的过程中,不断地比较数组中相邻的两个元素,较小者向上浮,较大者往下沉,整个过程和水中气泡上升的原理相似。

Java 数组中 是否存在 java数组中的元素_数组_07

冒泡排序: 

Java 数组中 是否存在 java数组中的元素_堆内存_08

 二维数组:

第一种方式: 数据类型[][] 数组名 = new数据类型[行的个数][列的个数];

第二种方式: 数据类型[][] 数组名 = new int[行的个数][];

第三种方式: 数据类型[][] 数组名= {{第0行初始值},{第1行初始值},...,{第n行初始值}};

案例:

Java 数组中 是否存在 java数组中的元素_数组_09