一维数组

1. 一维数组的使用

1.1 一维数组的声明

格式:

//推荐  
元素的数据类型[] 一维数组的名称;  
​  
//不推荐  
元素的数据类型  一维数组名[];

举例:

int[] arr;  
int arr1[];  
double[] arr2;  
String[] arr3;  //引用类型变量数组

数组的声明,需要明确:

(1)数组的维度:在Java中数组的符号是[],[]表示一维,[][]表示二维。

(2)数组的元素类型:即创建的数组容器可以存储什么数据类型的数据。元素的类型可以是任意的Java的数据类型。例如:int、String、Student等。

(3)数组名:就是代表某个数组的标识符,数组名其实也是变量名,按照变量的命名规范来命名。数组名是个引用数据类型的变量,因为它代表一组数据。

注意:Java语言中声明数组时不能指定其长度(数组中元素的个数)。 例如: int a[5]; //非法

2. 一维数组的初始化

2.1 静态初始化

  • 如果数组变量的初始化和数组元素的赋值操作同时进行,那就称为静态初始化。
  • 静态初始化,本质是用静态数据(编译时已知)为数组初始化。此时数组的长度由静态数据的个数决定。
  • 一维数组声明和静态初始化格式1:
    数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3,...};  
    或  
    数据类型[] 数组名;  
    数组名 = new 数据类型[]{元素1,元素2,元素3,...};
- new:关键字,创建数组使用的关键字。因为数组本身是引用数据类型,所以要用new创建数组实体。
  • 一维数组声明和静态初始化格式2:
数据类型[] 数组名 = {元素1,元素2,元素3...};//必须在一个语句中完成,不能分成两个语句写

举例:

public class ArrayTest2 {  
    public static void main(String[] args) {  
        int[] arr = {1,2,3,4,5};//右边不需要写new int[]  
​  
        int[] nums;  
        nums = new int[]{10,20,30,40}; //声明和初始化在两个语句完成,就不能使用new int[]  
​  
        char[] word = {'h','e','l','l','o'};  
​  
        String[] heros = {"袁隆平","邓稼先","钱学森"};  
​  
        System.out.println("arr数组:" + arr);//arr数组:[I@1b6d3586  
        System.out.println("nums数组:" + nums);//nums数组:[I@4554617c  
        System.out.println("word数组:" + word);//word数组:[C@74a14482  
        System.out.println("heros数组:" + heros);//heros数组:[Ljava.lang.String;@1540e19d  
    }  
}

2.2 动态初始化

数组变量的初始化和数组元素的赋值操作分开进行,即为动态初始化。

动态初始化中,只确定了元素的个数(即数组的长度),而元素值此时只是默认值,还并未真正赋自己期望的值。真正期望的数据需要后续单独一个一个赋值。

格式:

数组存储的元素的数据类型[] 数组名字 = new 数组存储的元素的数据类型[长度];

数组存储的数据类型[] 数组名字;
数组名字 = new 数组存储的数据类型[长度];

  • [长度]:数组的长度,表示数组容器中可以最多存储多少个元素。
  • 注意:数组有定长特性,长度一旦指定,不可更改。和水杯道理相同,买了一个2升的水杯,总容量就是2升是固定的。

3. 一维数组的使用

3.1 数组的长度

  • 数组的元素总个数,即数组的长度
  • 每个数组都有一个属性length指明它的长度,例如:arr.length 指明数组arr的长度(即元素个数)
  • 每个数组都具有长度,而且一旦初始化,其长度就是确定,且是不可变的。

3.2 数组元素的引用

如何表示数组中的一个元素?

每一个存储到数组的元素,都会自动的拥有一个编号,从0开始,这个自动编号称为数组索引(index)或下标,可以通过数组的索引/下标访问到数组中的元素。

数组名[索引/下标]

数组的下标范围?

Java中数组的下标从[0]开始,下标范围是[0, 数组的长度-1],即[0, 数组名.length-1]

数组元素下标可以是整型常量或整型表达式。如a[3] , b[i] , c[6*i];

4. 一维数组的遍历

将数组中的每个元素分别获取出来,就是遍历。for循环与数组的遍历是绝配。

举例1

public class ArrayTest4 {  
    public static void main(String[] args) {  
        int[] arr = new int[]{1,2,3,4,5};  
        //打印数组的属性,输出结果是5  
        System.out.println("数组的长度:" + arr.length);  
​  
        //遍历输出数组中的元素  
        System.out.println("数组的元素有:");  
        for(int i=0; i<arr.length; i++){  
            System.out.println(arr[i]);  
        }  
    }  
}

5. 数组元素的默认值

数组是引用类型,当我们使用动态初始化方式创建数组时,元素值只是默认值。例如:

public class ArrayTest6 {  
    public static void main(String argv[]){  
        int a[]= new int[5];   
        System.out.println(a[3]); //a[3]的默认值为0  
    }  
} 

对于基本数据类型而言,默认初始化值各有不同。

对于引用数据类型而言,默认初始化值为null(注意与0不同!)

一维数组

6. 一维数组内存分析

6.1 Java虚拟机的内存划分

为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。

JVM架构-简图

区域名称 作用
虚拟机栈 用于存储正在执行的每个Java方法的局部变量表等。局部变量表存放了编译期可知长度 的各种基本数据类型、对象引用,方法执行完,自动释放。
堆内存 存储对象(包括数组对象),new来创建的,都存储在堆内存。
方法区 存储已被虚拟机加载的类信息、常量、(静态变量)、即时编译器编译后的代码等数据。
本地方法栈 当程序中调用了native的本地方法时,本地方法执行期间的内存区域
程序计数器 程序计数器是CPU中的寄存器,它包含每一个线程下一条要执行的指令的地址

6.2 一维数组在内存中的存储

1、一个一维数组内存图

public static void main(String[] args) {  
    int[] arr = new int[3];  
    System.out.println(arr);//[I@5f150435  
}  


一维数组

2、数组下标为什么是0开始

因为第一个元素距离数组首地址间隔0个单元格。

3、两个一维数组内存图

两个数组独立

public static void main(String[] args) {  
    int[] arr = new int[3];  
    int[] arr2 = new int[2];  
    System.out.println(arr);  
    System.out.println(arr2);  
}  

一维数组

4、两个变量指向一个一维数组

两个数组变量本质上代表同一个数组。

public static void main(String[] args) {  
    // 定义数组,存储3个元素  
    int[] arr = new int[3];  
    //数组索引进行赋值  
    arr[0] = 5;  
    arr[1] = 6;  
    arr[2] = 7;  
    //输出3个索引上的元素值  
    System.out.println(arr[0]);  
    System.out.println(arr[1]);  
    System.out.println(arr[2]);  
    //定义数组变量arr2,将arr的地址赋值给arr2  
    int[] arr2 = arr;  
    arr2[1] = 9;  
    System.out.println(arr[1]);  
}

一维数组

Java基础

如何获取一个随机数

2025-8-8 10:25:48

Java基础

多维数组

2025-8-8 10:26:28

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索