java数组

java数组

概述

  • 数组本身是 引用数据类型 而数组中的元素可以是 任何数据类型 包括基本数据类型和引用数据类型
  • 创建数组对象会在内存中开辟一整块 连续的空间 而数组名中引用的是这块连续空间的首地址 。
  • 数组 的 长度一旦确定 就不能修改 。
  • 可以直接通过下标 或索引 的方式调用指定位置的元素 速度很快 。
  • 数组的分类:
    按照维度:一维数组 、 二维数组 、 三维数组 。
    按照元素的数据类型分:基本数据类型元素的数组 、 引用数据类型元素的数组, 即对象数组。

使用

  • 声明方式

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

  • 初始化

    一维
    //1.1 静态初始化:数组的初始化和数组元素的赋值操作同时进行
    int ids[] = new int[]{1001,1002,1003,1004};
    //1.2动态初始化:数组的初始化和数组元素的赋值操作分开进行
    String[] names = new String[5];
    names[0]="钱学森"
    names[1]="邓稼先"
    names[2]="袁隆平"
    		
    //错误的写法:
    //int[] arr1 = new int[];
    //int[5] arr2 = new int[5];
    //int[] arr3 = new int[3]{1,2,3};
    		
    //也是正确的写法:
    int[] arr4 = {1,2,3,4,5};//类型推断
    
    二维同理
    
    总结,静态初始化直接赋值,不写数组大小。动态初始化需指定数组的形状(大小)
    
    

    注意默认初始化值:

    image-20211106153717631

    数组本身是引用类型,所有在二维数组中,第二维的元素默认为null指针

  • 内存结构

    属于概念理解,一维举例string那边有点瑕疵。

    image-20211028120531982

    一维:

    image-20211028120905070

    二维:

image-20211106151603057

一维数组访问简单,通过下标就可以,数组名就是数组开始的地址

二维数组的访问需要注意:

package com.atguigu.java;
/*
 规定:二维数组分为外层数组的元素,内层数组的元素:
  		int[][] arr = new int[4][3];
  		外层元素:arr[0],arr[1]等
  		内层元素:arr[0][0],arr[1][2]等
  		
  数组元素的默认初始化值 :
 
    针对于初始化方式一:比如:int[][] arr = new int[4][3];
    外层元素的初始化值为:地址值
    内层元素的初始化值为:与一维数组初始化情况相同,为对应元素的默认初始化值
       
    针对于初始化方式二:比如:int[][] arr = new int[4][];
    外层元素的初始化值为:null
    内层元素的初始化值为:不能调用,否则报错。   
*/
public class ArrayTest3 {
	public static void main(String[] args) {
		
		int[][] arr = new int[4][3];
		System.out.println(arr[0]);//[I@15db9742 
		System.out.println(arr[0][0]);//0	
        
//		System.out.println(arr);//[[I@6d06d69c
		
		float[][] arr1 = new float[4][3];
		System.out.println(arr1[0]);//地址值
		System.out.println(arr1[0][0]);//0.0
		
		String[][] arr2 = new String[4][2];
		System.out.println(arr2[1]);//地址值
		System.out.println(arr2[1][1]);//null
		
		double[][] arr3 = new double[4][];
		System.out.println(arr3[1]);//null
//		System.out.println(arr3[1][0]);//报错
		
	}
}
  • 数组中常用的算法

    排序(待总结)

  • Arrays 工具类的使用

java.util.Arrays 类即为操作数组的工具类 包含了用来操作数组 (比如排序和搜索) 的各种方法

image-20211106152101586

  • 数组常见异常

image-20211106153340003

public class ArrayExceptionTest {
	public static void main(String[] args) {
		
		//1. 数组角标越界的异常:ArrayIndexOutOfBoundsExcetion
		int[] arr = new int[]{1,2,3,4,5};
		
//		for(int i = 0;i <= arr.length;i++){
//			System.out.println(arr[i]);
//		}
		
//		System.out.println(arr[-2]);
		
		
		//2.空指针异常:NullPointerException:通过空指针去找值
		//情况一:
//		int[] arr1 = new int[]{1,2,3};
//		arr1 = null;
//		System.out.println(arr1[0]);
		
		//情况二:
//		int[][] arr2 = new int[4][];
//		System.out.println(arr2[0][0]);
		
		//情况三:
		String[] arr3 = new String[]{"AA","BB","CC"};
		arr3[0] = null;
		System.out.println(arr3[0].toString());
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

moletop

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

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

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

打赏作者

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

抵扣说明:

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

余额充值