JAVA基础 (三) 数组

  • 数组概念: 数组就是用于存储数据的长度固定的容器,保证多个数据的数据类型要一致。

  • 百度百科中对数组的定义:

    所谓数组(array),就是相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,以便统一管理他们,然后用编号区分他们,这个名字称为数组名,编号称为下标或索引(index)。组成数组的各个变量称为数组的元素(element)。数组中元素的个数称为数组的长度(length)。

    数组的特点:

    1、数组的长度一旦确定就不能修改

    2、创建数组时会在内存中开辟一整块连续的空间。

    3、存取元素的速度快,因为可以通过[下标],直接定位到任意一个元素。

    数组类型

    • 一 :静态初始化  
    1. 数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3...};
    2. 数据类型[] 数组名 = {元素1,元素2,元素3...}; 
    • 二:动态初始化
    1. 数组存储的元素的数据类型[] 数组名字 = new 数组存储的元素的数据类型[长度];
  • 数组定义格式详解:

    • 数组存储的元素的数据类型: 创建的数组容器可以存储什么数据类型的数据。

    • 元素的类型可以是任意的Java的数据类型。例如:int, String, Student等

    • [] : 表示数组。

    • 数组名字:为定义的数组起个变量名,满足标识符规范,可以使用名字操作数组。

    • new:关键字,创建数组使用的关键字。因为数组本身是引用数据类型,所以要用new创建数组对象。

    • [长度]:数组的长度,表示数组容器中可以存储多少个元素。

    • 注意:数组有定长特性,长度一旦指定,不可更改。

      • 和水杯道理相同,买了一个2升的水杯,总容量就是2升,不能多也不能少。

        数组的默认值

                                当我使用动态数组时,只确定数组的长度,那么数组的元素是什么呢?

Java虚拟机的内存划分

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

 

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

一个数组内存图

两个数组内存图



 两个变量指向一个数组

 二维数组

  • 二维数组:本质上就是元素为一维数组的一个数组。

  • 二维数组的标记:[][]

  • 元素的数据类型[][] 二维数组的名称;

二维数组也可以看成一个二维表,行*列组成的二维表,只不过这个二维表,每一行的列数还可能不同。但是每一个单元格中的元素的数据类型是一致的,

数组常见的问题

  • 数组越界异常

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

创建数组,赋值3个元素,数组的索引就是0,1,2,没有3索引,因此我们不能访问数组中不存在的索引,程序运行后,将会抛出 ArrayIndexOutOfBoundsException 数组越界异常。在开发中,数组的越界异常是不能出现的,一旦出现了,就必须要修改我们编写的代码

  • 数组空指针异常

    public static void main(String[] args) {
    		//定义数组
    		int[][] arr = new int[3][];
            
            System.out.println(arr[0][0]);//NullPointerException
        }

    因为此时数组的每一行还未分配具体存储元素的空间,此时arr[0]是null,此时访问arr[0][0]会抛出NullPointerException 空指针异常。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值