Java17中的数组基础从这一章开始介绍Java中的数组对象。在Java中数组是怎么实现的呢,让我们来一探究竟。Java中的数组一经创建大小将不允许改变。需要注意的是Java中的数组是下标0开头的,也就是第一个数据的索引是0。一般用于传参时使用。使用toString方法把一组数组显示成字符串。不过多详说,后期有精力,可以来一套Java版本的数据结构。后续有相关后续知识点想到了在进行更新。

从这一章开始介绍 Java 中的数组对象。数组是编程语言中最常见的一种数据结构。 可用于存储相同数据类型的多个数据,通常采用数组索引的方式进行访问数组。其中包括数组的创建赋值和取值。
在 Java 中数组是怎么实现的呢, 让我们来一探究竟。
数组也算是一种数据类型数组类型,前面我们说过基础类型和引用类型, 数组也可以单独的称为一种数据类型。 并且在程序语言中大量使用。并且数组既可以保存基础数据类型, 也可以保存引用类型。只要类型一致即可存储。所以针对数组可以理解为引用类型的数据类型。
数组声明创建针对数据, 我们如何声明呢?声明的方式有两种。
第一种:
变量类型[] 变量名;
第二种:
变量类型 变量名[];
通常情况下都是使用第一种方式, 比较适合大多数人的习惯。 看起来更舒服。可能是因为看多了。 另外一个原因是这样数据类型和变量就区分开了。
体会一下上面的代码形式, int[] arrays; 这种肯定比 int arrays2[]; 肯定更能理解。而且后面的定义方式, 对于识别上来说, 有点歧义不知道到底是数组还是一个变量,为了后续学习其他的编程语言推荐使用第一种方式进行编写。
数组初始化数组的学习, 第一步首先要知道怎么声明数组, 接着就需要知道怎么创进行数组的初始化。 创建数组初始化的过程是给数组分配内存的过程。 Java 中的数组一经创建大小将不允许改变。
创建数组也分两种形式:
1. 静态初始化:变量类型[] 变量名 = new 数据类型[]{value1, value2}int[] arrs = new int[]{1, 2, 3, 4, 5};2. 动态初始化:变量类型[] 变量名 = new 数据类型[数组长度];int[] arrs = new int[5];
需要注意的是: 定义数组时不能指定数组的长度。
对于数组的初始化两种区别。
静态初始化:初始化有程序显式的指定每个元素的初始化, 并且根据指定元素的长度由系统决定。
动态初始化:初始化的时候指定数组的长度,由系统为数组分配元素的初始值。
举例说明:
运行效果查看:
根据初始化的方式, 自己多练习。练习出真知。这里新增了一个 for 循环的使用方式, 就是 foreach 的使用方式。
// iterate over an array or Iterablefor (int i : arrayInt) {}
知道如何使用即可。上次在循环的章节第一个版本忘记介绍这个了。 继续。
数组赋值对于初始化的数组, 可以通过索引下标重新赋值。需要注意的是 Java 中的数组是下标 0 开头的, 也就是第一个数据的索引是 0。
int[] arrayInt = new int[]{1, 2, 3};System.out.println(arrayInt[0]""); // 输出 索引 0 的值 1
对于初始化的数组, 赋值的时候不能指定长度。 例如上面的例子: new byte[4]{}; 这里的 4 就不能定义, 否则会有语法错误。
对于给数组赋值, 需要注意一个新的概念。 叫作数组越界。 因为数组索引从 0 开始, 所以数组的长度, 就是每个数组元素的个数会和数组的所以有个关系, 就是索引大小等于数组长度减一。
也就是上面的例子, 就只能这样进行赋值和修改值。
arrayInt[0] = 5;arrayInt[1] = 6;arrayInt[2] = 7;
运行查看结果:
修改代码所以为 -1 查看运行效果:
会出现一个异常 java.lang.ArrayIndexOutOfBoundsException: -1 的错误,这个错误一定要记牢, 后续正式开发中已经会遇到这个问题的。该走的路还是要走一遍的, 要不然你怎么能够记得清楚呢。
既然是数组, 并且包含多个元素, 在程序的运行过程中, 怎么知道这个数组包含多少元素呢?这里对于数组有一个属性叫作 length, 这个是一个静态的变量。可以查看当前数组的长度。
自行运行查看效果; 这里长度肯定就是 5。
这里有一个新知识点: 匿名数组。
匿名数组:在正常的创建数组中, 会定义一个变量来使用, 如果在使用中, 不使用变量定义的方式进行使用, 就是匿名使用了。 一般用于传参时使用。举个例子:
public void showArray(int[] arrayInt){//显示 arrayInt 数据}public static void main(String[] args){showArray(new int[]{1, 2, 3});}
这里和上面的初始化方式是一致的, 并在在这使用之后就直接交给垃圾回收器进行回收了。因为没有该数组的引用在使用了。
使用数组在上面的赋值过程其实就是使用数组的过程。并且在 Java 中提供了 Arrays 操作数组的对象。 查看API 看看其使用方法。
根据文档描述, 该类主要包含了操作数组的各种方法, 比方说排序和搜索。并且这个类还包含了一个静态的工厂,允许将数组视为列表。
使用 toString(数组变量) 方法把一组数组显示成字符串。通过 API 我们可以看到这是一些列的 toString 的重载方法, 什么是重载方法,后续在说到面向对象的时候详细讲解。 现在就认为可以支持一下对应的参数类型即可。
查看该源码, 你会发现也是使用 for 循环进行了遍历, 只不过使用了 StringBuilder 进行合并字符串, 你可以暂时认为他是 String,但是又有一些不一样。源码如下:
你在第一次学习的时候, 尽量把所有的参数都调用一遍,然后看看源代码,你会有更大的进步。多看别人写的代码,有助于增加你的学习速度。 就相当于你没有丰富的人生阅历, 可以通过经典的小说体会其中的酸甜苦辣。
排序(sort): 对于 Java 的 API 大多数情况下是遵守英语的命名方法的, 所以见名知意也是他的优点之一。所以想到排序首先想到的是 sort 单词,让我们看一下 API 中有哪些包含 sort 的函数。
通过翻阅 API 发现 sort相关的方法有:
编写测试例子,
可以查看该类的源码, 如果你之前学过数据结构的话,可以好好看看 Java 数组的数据结构实现。不过多详说, 后期有精力, 可以来一套 Java 版本的数据结构。
多维数组上面说了这么多都是一维数组, 在 Java 里面也可以定义一个非标准的二维数组, 因为它是疯狂套娃出来的二维数组。所以可以看看其使用规则。
数组的定义同样有两种情况, 还是和上面一样, 推荐第一个方式, 原因也是一样的。
数据类型[][] 数组变量;数据类型 数组变量[][];
代码演示:
多维数组基本上实际开发的时候不怎么使用。 后续分析 Java 的 heap 和 stack 的时候, 在详细说明。
数组先到这吧。 后续有相关后续知识点想到了在进行更新。 关注,点赞,收藏。不迷路。
