Java学习第四天笔记-第三部分

本文详细介绍了数组的基本概念,包括数组的定义方式及其在内存中的存储结构。同时,还探讨了数组在不同内存区域(如栈和堆)中的分配与管理,并列举了几种常见的数组操作异常。

数组:

概念:数组就是存放同一种数据类型的集合,在内存中的表现形式为一个实体的容器.

特点:数组可以自动给存放在其中的数据元素进行索引编号,从0号开始.方便我们直接通过操作数组来操作其中的元素数据.


定义格式1:

元素类型[] 数组名 = new 元素类型[元素个数或数组长度];     int[] arr = new int[3];


定义格式2:

元素类型[] 数组名 = new 元素类型[]{元素,元素,元素,....};      int[] arr = new int[]{3,5,4,2,7,9};


数组在内存中的结构:



内存的划分:

1.寄存器(CPU进行操作管理)

2.本地方法区(所在操作系统如window中提供的一些方法)

3.方法区(类加载技术)

4.栈内存

储存的是局部变量,所谓局部变量就是在函数(方法)当中定义的变量,注意类级别下定义的变量不是局部变量.

栈内存运行效率高,其中数据生命周期短,变量所属的作用域一旦结束,该变量就自动释放.

5.堆内存

存储数组和对象(数组也是一种对象),凡是通过new来建立的实体都存放在堆内存中.

每个实体都有一个首地址值.

堆内存中的每一个变量都是一个默认初始化值,根据类型的不同而不同,整数是0,小数是0.0或者0.0f,布尔是false,

char类型是'\u0000'.

堆内存中的实体不再被指向时,该实体就会变成垃圾由垃圾回收机制来回收,并不是实时的.

相对于基本数据类型,对象被称为引用数据类型,因为在栈中的对象变量只是存储了其指向的堆中实体的地址值.

null用以取消引用类型变量的指向.

多个引用型变量可以指向同一个实体.它们只是记录了同一个实体在堆中的地址值.


几种异常和特殊情况:

1.数组索引越界异常,当访问到数组中不存在的角标时,发生该异常.

int [] arr = new int[3];//数组的中元素的个数为3个

System.out.println(arr[3]);//数组的角标编号从0开始,0,1,2.此数组没有3角标


2.空引用(指针)异常,当引用型变量没有指向任何实体时,还在使用其操作实体,就会发生该异常.

int[] arr = new int[3];

arr = null;//取消了引用类型变量的指向

System.out.println(arr[0]);//无法访问


以上两种异常在编译时并不会报错,到JVM运行时才会报异常.因为以上两种情况语法并没有错误,编译器在编译时只是检查语法,并不会真正在内存中加载数组,所以编译时不会报错.


3.一种特殊情况 ,直接打印了数据类型变量,而不是访问其中的某个元素,得到一串哈希值,表示实体在堆中存放的数据类型和地址值.一般在测试中用到,查看引用型变量指向的是一个什么样的实体.

int[] arr = new int[3];

System.out.println(arr);  // [I@d12345   [:表示该实体存放的是一个数组   I:表示该实体的元素的类型是int型         //d12345是调用window方法得出的一串哈希值,表示该实体在内存中的地址值.

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值