Java数组学习

发布于:2025-02-27 ⋅ 阅读:(13) ⋅ 点赞:(0)

java数组学习

结论:数组是相同类型数据的有序集合。(相同类型的若干个数据,按照一定的先后次序排列组合而成)其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标(数组的下标是从0开始索引)来访问他们。数组有边界,数组的长度为array.length。数组检索的范围是0-array.length-1。如果超过这个边界,就会报错数组下标越界ArrayIndexOutOfBounds。

Java 中的数组是一种用于存储固定大小的同类型元素的容器。数组在声明时就已经确定了其大小,并且在生命周期内无法改变。Java 数组可以是基本数据类型的数组,也可以是对象类型的数组。

数组的基本特点

  1. 数组的长度是确定的,数值一旦被创建,他的大小就是不可以改变的。

  2. 数组的元素必须是相同类型,不允许出现混合类型。(int类型的数组中不能出现除int类型以外的数据类型。)

  3. 数组的元素可以是任何数据类型,包括基本类型和引用类型。

  4. 数组变量属于引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。

​ 数组本身就是对象,Java中对象是在堆中。因此数组无论保存原始类型还是其他对象类型,都保存在堆中

数组的声明创建初始化

在这里插入图片描述

数组的声明

数组的声明指的是在代码中首次引入一个数组变量,但此时并不分配内存空间给数组。声明只是告诉编译器这个变量将会引用一个数组对象。数组的声明可以包括数组的类型和数组的名字。

数组的创建

数组的创建指的是为数组分配内存空间,并可能初始化数组的元素。数组的创建通常使用new关键字,并指定数组的长度或直接在花括号中提供初始化值。

package com.jianstudy.array;
public class ArrayDemo01 {
    public static void main(String[] args) {
      //数组的数据类型 数组名 = new 数组类型[数组长度]; dateType[] name = new dateType[arraySize];
      //声明创建一个数组nums,数组有5个元素。数组下标就是0-4。
      //数组的所有数据只能是一种类型的 要么是数字要么是字符串不能同时出现两种数据类型
      //数组声明的两种形式 int[] name , int name[] 两种都可以首选前者
        int[] nums = new int[5];
      //数组元素初始化赋值 数组有5(array.length)个元素。数组下标就是0-4(0-array.length-1)。
      //如果索引时超过了数组的个数就会报错 数组下标越界(ArrayIndexOutOfBounds)
        nums[0]=1;
        nums[1]=5;
        nums[2]=3;
        nums[3]=2;
        nums[4]=6;
        //nums[4]="ijian";报错需要的是int类型提供的是String类型

        System.out.println("第0号元素的值"+nums[0]);
        System.out.println("第1号元素的值"+nums[1]);
        System.out.println("第2号元素的值"+nums[2]);
        System.out.println("第3号元素的值"+nums[3]);
        System.out.println("第4号元素的值"+nums[4]);
        //System.out.println("第4号元素的值"+nums[5]);nums数组只有5个元素,nums[5]已经超过了数组的大小会报错数组下标越界 ArrayIndexOutOfBoundsException

        //获取数组长度(遍历数组)数组名.length   array.length
        System.out.println("这个数组的长度:"+nums.length+"个元素");
    }
}

在这里插入图片描述

数组的初始化

在Java编程语言中,数组的初始化是一个为数组元素分配初始值的过程。初始化可以在数组声明时直接进行,也可以在数组声明之后的某个时刻通过赋值来完成。

  1. 静态初始化

静态初始化指的是在数组声明的同时就为其分配初始值。这种方式通常用于我们知道数组的具体内容和大小的情况。

  1. 动态初始化

动态初始化则是指先声明数组,然后在程序的后续某个时刻为其分配内存空间和初始值。这种方式在数组的大小或内容在程序运行时才能确定时非常有用。

  1. 隐性初始化

当数组通过 ‌动态初始化‌ 方式声明时(即仅指定长度,不直接赋值),JVM会自动为数组元素分配默认值。这种自动赋值的机制称为“隐性初始化”‌。隐性初始化仅作用于数组元素,数组变量本身仍需通过 new 分配内存

隐性初始化的默认值由数组元素的数据类型决定:

数据类型 默认值
整型(int/long等) 0
浮点型(float/double 0.0
boolean false
引用类型(如String null

静态/动态初始化核心区别在于:

  • 静态初始化‌:声明时直接赋值,编译器自动推导长度。
  • 动态初始化‌:声明时仅指定长度,由JVM分配内存并赋默认值。
package com.jianstudy.array;
public class ArrayDemo02 {
    public static void main(String[] args) {
        //数组静态初始化 直接在声明数组时给数组赋值
        int[] A = {1,2,3,4,5};
        System.out.println("A[0]元素"+A[0]);
        System.out.println("A[1]元素"+A[1]);
        System.out.println("A[2]元素"+A[2]);
        System.out.println("A[3]元素"+A[3]);
        System.out.println("A[4]元素"+A[4]);
        //数组动态初始化
        int[] B = new int[5];
        B[0] = 5;
        B[1] = 4;
        B[2] = 3;
        B[3] = 2;
        B[4] = 1;
        System.out.println("B[0]元素"+B[0]);
        System.out.println("B[1]元素"+B[1]);
        System.out.println("B[2]元素"+B[2]);
        System.out.println("B[3]元素"+B[3]);
        System.out.println("B[4]元素"+B[4]);
        /*
        数组的隐性默认初始化。
        数组是引用类型,他的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐性初始化。      
        如果不给2,3,4号元素赋值,那2,3,4号元素输出的结果就是这个数据类型的默认值int类型是0,String类型是null
         */
        int[] C = new int[5];
        C[0] = 5;
        C[1] = 4;
        System.out.println("C[0]元素"+C[0]);
        System.out.println("C[1]元素"+C[1]);
        System.out.println("C[2]元素"+C[2]);
        System.out.println("C[3]元素"+C[3]);
        System.out.println("C[4]元素"+C[4]);
    }
}

在这里插入图片描述

注意事项

索引范围:

  • 数组索引从 0 开始,最大为 长度-1
  • 越界访问会抛出 ArrayIndexOutOfBoundsException
package com.jianstudy.array;

public class ArrayDemo03 {
    public static void main(String[] args) {
        //数组下标越界
        int[] nums = new int[5];
        nums[0]=1;
        nums[1]=5;
        nums[2]=3;
        nums[3]=2;
        nums[4]=6;
        //nums数组只有0-4号5个元素,nums[5]已经超过了数组的边界会报错数组下标越界 ArrayIndexOutOfBoundsException
        System.out.println("第5号元素的值"+nums[5]);
    }
}

在这里插入图片描述