JAVA 数组,nginx 教程从入门到精通
因此,这就引出了一个容器的概念。
容器概念:
**容器:**是将多个数据存储到一起,每个数据称为该容器的元素。
**生活中的容器:**水杯,衣柜,教室
Java 从容器的角度衍生出了针对数据存储的 Java 容器:数组。
数组介绍:
数组概念: 数组就是数据类型一致、数据长度固定的用来存储数据的容器。
1.2 数组的分类
前面介绍了,数组就是存放数据类型一致、长度固定的容器,而我们的数据类型又分为基本数据类型和引用数据类型。因此,数组中可以存放一些基本数据类型数据,比如 int、long,也可以存放引用数据类型,比如 String、类、甚至是数组本身。也就是说,数组里面甚至可以嵌套数组,因此 Java 数组可以分为一维数组、二维数组、。。。多为数组。
开发中,最常用的还是一维数组以及二维数组。二维数组顾名思义,就是在一维数组中的每一个元素类型又是一个数组(类似之前学习的嵌套 for 循环)。
第 2 章 一维数组的基本操作
=============
2.1 一维数组的定义
数组的定义有三种方式。
1. 方式一
格式:
?数据类型[] 数组名 = new 数据类型[长度];
数组定义格式详解:
数据类型: 创建的数组容器可以存储什么数据类型,所有数据类型都可以存储。
[] : 表示数组。
数组名字:为定义的数组起个变量名,满足标识符规范,可以使用名字操作数组。
new:关键字,创建数组使用的关键字。
[长度]:数组的长度,表示数组容器中可以存储多少个元素。
注意:数组有定长特性,长度一旦指定,不可更改。
举例:
定义可以存储 6 个整数的数组容器,代码如下:
?int[] array = new int[6];
2.方式二
格式:
?数据类型[] 数组名 = new 数据类型[]{元素 1,元素 2,元素 3...};
举例:
定义存储 1,2,3,4,5,6 整数的数组容器。
int[] arr = new int[]{1,2,3,4,5,6};?
3.方式三
格式:
?数据类型[] 数组名 = {元素 1,元素 2,元素 3...};
举例:
定义存储 1,2,3,4,5,6 整数的数组容器。
int[] arr = {1,2,3,4,5,6};
说明:
上面定义数组并初始化的时候,都是使用 int[] arr 这种形式,Java 数组还支持 int arr[] 这种形式的定义。
2.2 数组的基本操作
数组是存储一类元素的,有了数组就方便进行元素统一管理,下面介绍一下数组的基本操作。
2.2.1 数组相关概念说明
索引: 每一个存储到数组的元素,都会自动的拥有一个编号,从 0 开始,这个自动编号称为数组索引(index),可以通过数组的索引访问到数组中的元素。
格式:
数组名[索引]
数组的长度属性: 每个数组都具有长度,而且是固定的,Java 中赋予了数组的一个属性,可以获取到数组的长度,语句为:
数组名.length
,属性 length 的执行结果是数组的长度,int 类型结果。由次可以推断出,数组的最大索引值为数组名.length-1
。
2.2.2 数组基本操作
数组创建后,涉及到数组的对应位置元素的初始化、元素的修改、元素的获取。
public static void main(String[] args) {
// 定义一个定长数组
int[] array = new int[3];
// 1、元素赋值
array[0]=1;
array[1]=2;
array[2]=3;
// 2、元素修改
array[0]=11;
// 3、元素获取
int a=array[0];
// 打印数组,Arrays 先了解即可
System.out.println(Arrays.toString(array));
}
**注意:**因为数组长度固定,因此数组本身无法添加或者移除元素,但是我们可以在原数组的基础上复制一份数组来改变其长度和元素。
2.2.3 数组初始化值介绍
在前面章节学习 java 变量的时候介绍过,定义的变量如果没有初始化赋值是不能使用的,否则编译报错。而今天学习的数组,内部可以存放各种数据类型,如果没有初始化赋值是否会报错呢?
public static void main(String[] args) {
// 定义一个定长数组
int[] array = new int[3];
System.out.println(array[0]); // 0
}
上面示例结果没有报错,且输出结果为 0,测试发现没有初始化赋值的 int 类型数组每一个位置都有个默认值 0。
所以,这里要强调的是数组作为一个引用数据类型,内部可以存放各种类型元素,如果没有进行初始化赋值,都会有一个默认初始化值。
2.3 数组原理分析
2.3.1 内存概述
内存是计算机中的重要原件,临时存储区域,作用是运行程序。我们编写的程序是存放在硬盘中的,在硬盘中的程序是不会运行的,必须放进内存中才能运行,运行完毕后会清空内存。
Java 虚拟机要运行程序,必须要对内存进行空间的分配和管理。
2.3.2 Java 虚拟机的内存划分
为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。
内存区域说明:
| 区域名称 | 作用 | 说明 |
| --- | --- | --- |
| 程序计数器(寄存器) | 是一块较小的内存区域,可以看做是当前线程执行的字节码的行号指示器 | 给 CPU 使用,和我们开发无关 |
| 虚拟机栈 | 虚拟机栈描述的是 Java 方法执行的内存模型 | JVM 在使用操作系统功能的时候使用,和我们开发无关 |
| 堆 | 该区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存 | 是 Java 虚拟机所管理的内存中最大的一块,被进程的所有线程共享,在虚拟机启动时被创建 |
| 方法区 | 存放的是被虚拟机加载的 class 类信息,常量,静态变量,即时编译器编译后的代码等数据 | 方法区也是线程共享的 |
| 本地方法栈 | 与虚拟机栈类似,为虚拟机使用到的 Native 方法服务 | 方法运行时使用的内存,比如 main 方法运行,进入方法栈中执行 |
2.3.3 数组在内存中的存储
先定义一个普通数组:
public static void main(String[] args) {
// 定义一个定长数组
int[] array = new int[3];
System.out.println(array); // [I@15db9742
}
以上方法执行,输出的结果是[I@15db9742,这个是什么呢?是数组在内存中的地址。new 出来的内容,都是在堆内存中存储的,而方法中的变量 arr 保存的是数组的地址,是在本地方法栈中存储的。
第 3 章 二维数组介绍
==========
数组除了包括有简单的一维数组还有嵌套的多维数组(类比嵌套 for 循环),这里我们就对开发中另一个常用的二维数组为例进行多维数组的讲解。
3.1 二维数组的定义
二维数组,本质就是在一维数组的基础上,每一个元素又由一个新的数组组成。
1. 方式一
格式:
??数据类型[][] 数组名字 = new 数据类型[长度][长度];
举例:
int[][] array = new int[2][3];?
这种方式只是设定了数组的一维和二维的长度,并没有赋值。
2.方式二
格式:
评论