数组

本文详细介绍了Java中数组的概念、定义方式、动态初始化、内存分配以及常见的数组操作,包括静态初始化、动态初始化、数组遍历、获取数组最值等。同时,文中提到了数组初始化时的默认值和可能遇到的异常情况,如数组越界和空指针异常,并给出了相应的解决方案。
摘要由CSDN通过智能技术生成

数组就是存储数据长度固定的容器,存储多个数据的数据类型要一致。

数组定义格式
方式一:
	数据类型[] 数组名  //定义一个 int类型数组 ,数组名是arr  推用此方式
    int[] arr;  
	char[] arr;

方式二:
	数据类型 数组名[]  //定义一个 int类型变量 ,变量名是arr
    int arr[]; 
	double arr[];
数组动态初始化

数组动态初始化就是只给定数组的长度,由系统给出默认初始化值

数据类型[] 数组名 = new 数据类型[数组长度];

package com.itheima_01;

import java.security.spec.RSAOtherPrimeInfo;
/*
数组初始化:
Java中的数组必须先初始化,然后才能使用
所谓初始化:就是为数组中的数组元素分配内存空间,并为每个数组元素赋值 (动态初始化,静态初始化)

动态初始化:初始化时只指定数组长度,由系统为数组分配初始值
         格式:数据类型[] 数组名 = new 数据类型[数组长度];
         范例:int [] arr = new int[3];
*/
public class ArrayDemo {
    public static void main(String[] args) {

        int [] arr = new int[3];
        /*
        左边 :
            int:说明数组中的元素类型是int
            []:说明这是一个数组
            arr:这是数组的名称
        右边:
            new:为数组申请内存空间
            int:说明数组的元素类型是int类型
            []:说明这是一个数组
            3:数组长度,其实就是数组中的元素个数
               */

        //输出数组名
        System.out.println(arr);   //[I@4554617c   地址;申请地址空间时的空间地址

        //输出数组中的元素
        System.out.println(arr[0]);  //0 系统分配
        System.out.println(arr[1]);  //0 系统分配
        System.out.println(arr[2]);  //0 系统分配
    }
}
内存分配
            int [] arr = new int[3];   //执行过程
生成        区域;用于存储    new开辟空间;可以存3个元素;没有元素,默认给30(整数默认为0);生成编号
          new赋予arr[I@4554617c           [I@4554617c
arr[0]     arr通过 new空间[I@4554617c 编号指向索引找到对应的值
              栈内存         堆内存
           存储局部变量      存储new出来的内容(实体,对象);数组在初始化时,会为存储空间添加默认值

  • 栈内存:存储局部变量

定义在方法中的变量,例如:arr,使用完毕,立即消失

  • 堆内存:存储new出来的内容(实体,对象)

数组在初始化时,会为存储空间添加默认值

整数:0 浮点数:0.0 布尔:false 字符:空字符 引用数据类型:null

每一个new出来的东西都有一个地址值,使用完毕,会在垃圾回收器空闲时被回收

单数组赋值;多数组赋值 过程一样

        int [] arr = new int[3];   //执行过程

        //给数组中的元素赋值()
        arr[0] = 100;
        arr[2] = 200;

        System.out.println(arr);    //[I@4554617c 不变
        System.out.println(arr[0]);  //100
        System.out.println(arr[1]);  //0     初始化添加默认值0
        System.out.println(arr[2]);  //200

多个数组指向相同,其中一个改变堆内存,另一个访问时也是获取修改后的堆内存

public class ArrayDemo2 {
    public static void main(String[] args) {
        int [] arr = new int[3];
        arr[0] = 100;
        arr[1] = 200;
        arr[2] = 300;

        //定义第二个数组指向第一个数组;
        int [] arr2 =arr;
        arr2[0]=111;
        arr2[1]=222;
        arr2[2]=333;

        //输出两个数组的名及元素
        System.out.println(arr);       //[I@4554617c
        System.out.println(arr[0]);    //111
        System.out.println(arr[1]);    //222
        System.out.println(arr2);      //[I@4554617c
        System.out.println(arr[0]);    //111
        System.out.println(arr2[1]);   //222
    }
}

静态初始化(常用)

初始化时指定每个数组元素的初始值,由系统决定数组长度

完整版格式:

数据类型[] 数组名 = new 数据类型[]{元素1,元素2,…};

简化版格式:

数据类型[] 数组名 = {元素1,元素2,…};

       //静态初始化数组 ;初始化时,将数组直接赋值(不使用默认值)
        int [] arr3 = {1,2,3};
        System.out.println(arr3[0]);  //1
        System.out.println(arr3[1]);  //2
        System.out.println(arr3[2]);  //3
数组操作常见小问题
  • 索引越界

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

    数组长度为3,索引范围是0~2,但是我们却访问了一个3的索引。 程序运行后,将会抛出ArrayIndexOutOfBoundsException 数组越界异常。在开发中,数组的越界异常是不 能出现的,一旦出现了,就必须要修改我们编写的代码。

    解决方案:将错误的索引修改为正确的索引范围即可!

  • 空指针异常

    public class ArrayDemo {    
    	public static void main(String[] args) {        
    		int[] arr = new int[3];
     
        	//把null赋值给数组        
        	arr = null;        
            System.out.println(arr[0]);    
        } 
    }
    

    arr = null 这行代码,意味着变量arr将不会在保存数组的内存地址,也就不允许再操作数组了,因此运行的时 候会抛出 NullPointerException 空指针异常。在开发中,数组的越界异常是不能出现的,一旦出现了,就必 须要修改我们编写的代码。

    解决方案:给数组一个真正的堆内存空间引用即可

数组遍历

获取数组元素个数:数组名.length 例:arr.length

package com.ArrayDemo_06;

public class ArrayTest01 {
    public static void main(String[] args) {
        int[] arr = {11, 22, 33, 44, 55};
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
}

数组获取最值
package com.ArrayDemo_06;

public class ArrayTest02 {
    public static void main(String[] args) {
        int [] arr = {22,56,34,77,14};
        int i = arr[0];
        for (int x=1;x<arr.length;x++){
            if (arr[x]>i){
                i = arr[x];
            }
        }
        System.out.println(i);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

岿然如故

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值