栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

什么是数组?认识 Java 中的数组

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

什么是数组?认识 Java 中的数组

目录

前言

1. 数组是什么?

2. 创建数组

2.1 基本语法(数组的声明和初始化)

2.2 示例

3. 数组的基本使用

3.1 获取数组的长度

3.2 获取数组中的元素

3.3 遍历数组

3.4 数组作为方法的返回值

3.4.1 直接修改原数组

3.4.2 返回一个新数组

4.理解引用类型

1. int 类型传参:

2. 数组传参:

5. 认识 null 

6. 初始 JVM 内存划分


前言

数组是 JavaSE 中遇到的第一个引用类型,在数据结构中属于顺序表。学好数组就是学好数据结构的一个重要基础。


1. 数组是什么?

如果我们需要两个数据就可以直接创建两个变量,如果需要多个数据,直接创建会很麻烦,这时候就会使用“批量生产”,而数组就是可以“批量”创建变量,需要注意的是在 Java 中数组是创建相同类型的变量。

2. 创建数组

2.1 基本语法(数组的声明和初始化)

动态数组:

数据类型[ ] 数组名称 = new 数据类型[ n ];// n 表示的是数组长度

数据类型[ ] 数组名称 = new 数据类型[ ]{ 初始化数据 };

静态数组:

数据类型[ ] 数组名称 = { 初始化数据 };

 2.2 示例
// 动态初始化
int[] arr1 = new int[10];
int[] arr2 = new int[]{1, 2, 3, 4};
int[] arr3 = new int[5]{1, 2, 3, 4}; // 部分初始化,没有初始化的数据的默认值为0
// 静态初始化
int[] arr3 = {1, 2, 3, 4};

 3. 数组的基本使用

3.1 获取数组的长度

3.2 获取数组中的元素

示例中 arr3[2] 取得是数组中下标为 2,但是是数组中的第三个数,因为在数组中下标是从0开始的。[ ] 中的数称作索引,也叫做数组的偏移量,索引的取值范围:0 <= index <= arr.length. 使用[ ]操作既可以读取数据也能修改数据。

数组中最常出现的问题:下标越界

上述代码中数组初始化长度为10,但是却取了第11个数据,第11个数据不存在,这样就会发生下标越界问题。使用数组时一定要考虑边界会不会出现下标越界问题。

3.3 遍历数组

遍历数组使用循环将数组中的所有元素都访问一遍。

方法一:for 循环

int[] arr3 = {1, 2, 3, 4};
System.out.println("数组的遍历:");
for (int i = 0; i < arr3.length; i++) {
     System.out.print(arr3[i] + ",");
}

 方法二:for - each 循环

int[] arr3 = {1, 2, 3, 4};
for (int i : arr3) {
     System.out.print(i + ",");
}

 for 循环和 for - each 循环的区别:for - each 循环是 for 循环的另一种方式,但是 for - each 循环不会修改元素。当只需要访问元素不需要修改原数组时使用 for - each 方式。

3.4 数组作为方法的返回值

示例:写一个方法,将数组中的每一个元素都乘以2.

3.4.1 直接修改原数组

3.4.2 返回一个新数组

代码:

public class Demo2 {
    public static void main(String[] args) {
        int[] arr = {10, 20};
        int[] result2 = transform2(arr);
        printArr(result2);
        printArr(arr);

//        System.out.println("---------");
//        printArr(result1);
    }

    // 返回值
    // 直接修改原数组
    public static int[] transform(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            arr[i] *= 2;
        }
        return arr;
    }

    // 返回一个新的数组
    public static int[] transform2(int[] arr) {
        int[] result = new int[arr.length];
        for (int i = 0; i < arr.length; i++) {
            result[i] = arr[i] * 2;
        }
        return result;
    }

    // 打印数组
    public static void printArr(int[] arr) {
        for (int i : arr) {
            System.out.print(i + ",");
        }
        System.out.println();
    }
}

4.理解引用类型

引用是什么?就相当于一个“别名”,创建一个引用就意味着创建一个变量,这个变量保存着一个地址。

通过传参这个例子体会引用类型是如何传参,以及元素在内存中的存储。

示例:交换两个元素的值。

1. int 类型传参:

从运行结果来看 a 和 b 的值并没有交换,这是因为调用 swapValue 方法时将实参 a, b(也就是main 方法的 a, b) 的值赋给swapValue中的形参 a,b ,然后交换了 swapValue() 中两个形参的值,但是本质上实参 a,b 的值并没有交换。

过程如图:

2. 数组传参:

数组是一个引用类型,int[ ] arr = {10,20} 中的 arr 只是一个引用,在内存中 arr 引用的是存储数组的起始地址。将 main 函数中的 arr 传给 swap 方法,使 swap 方法中的 arr 也引用同一个数组的起始位置,这样数组中发生的改变是对于两个 arr 是一样的。具体过程如下图:

5. 认识 null 

null 在 Java 数组中表示“空引用”,空指针异常也是数组中遇到的常见错误。

 6. 初始 JVM 内存划分

JVM 内存会被划分成好几个区域,目前我们只重点理解栈和堆。

栈:栈中保存的是函数中的局部变量(包括方法中的形参和实参)和引用;堆:所有 new 出的对象都保存在堆上;堆的空间非常大,栈的空间比较小;堆是整个 JVM 共享一个,而一个 JAVA 程序中可能会存在多个栈。

比如引用类型在 JVM 上的分配:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/887699.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号