数组的基础理解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组的基础理解相关的知识,希望对你有一定的参考价值。
数组:
1.概念,什么数数组?
数组是存储多个变量(元素)的东西(容器);
这多个变量的数据类型要一致;
2.java的内存分配图
java为了提供程序的执行效率,将内存分为五个部分
A.栈内存:可以存储局部变量
在方法定义中(定义的局部变量)或者在方法声明上(形参)都是局部变量
当方法或者代码执行完后,局部变量就会及时从内存中释放掉;`
B.堆内存:
new出来的东西在堆内存,堆内存中创建的数组对象会在使用后,由垃圾回收期释放,但不是用完立即释放,而是等垃圾回收器空闲才进行释放
C.方法区
面向对象部分讲
D本地方法区(和系统有关系)
E寄存器(和CPU有关)
3.数组的定义:
数据类型[] 数组名;
数据类型 数组名[];
例如:
int [] a; 定义了一个int类型的数组变量a;
int a [];定义了一个int类型 变量a的数组;
这两个方式定义:虽然写法不同,读法不同但是表达的效果是一样的,都是在定义一个数组;
面试过程中如果没有说明二维数组,都用如上的一维数组去做;
4.数组的初始化
1)动态初始化:给数组指定长度,数组中的元素值由系统默认给定;
2)静态初始化:给定数组中元素的值,数组的长度有系统给定;
动态初始化:
数据类型[]数组名 = new 数据类型[数组长度]
例如:
int [] arr = new int[3];
没有被初始化的数组是没办法被使用的,不能直接输出一个arr,必须有new那些东西;
此时打印输出arr就是一个地址值,
获取数组中的元素:通过数组名称获取
格式:
数组名称[索引值],数组的索引值从零开始,最大的索引是数组长度-1;
输出arr[0] arr[1] 结果都是自动给定的0;
静态初始化:
原始格式: 数据类型[] 数组名称 = new 数据类型[]{元素1.2.3....}
简写方式: 数据类型[]数组名称 = {元素1.2.3.........}
举例: int [] arr = new int[]{1,2,3}
int [] arr = {1,2,3}
如果定义是这样定义:
int[] arr = new int[3]{1,2,3}
这样便是错误的,因为这样是动静结合,不可使用;
-
Throwable类是java语言中所有错误或者异常的超类;
而Throwable的已知子类便是;
Error:错误(严重错误);
Exception:异常 分为编译时期,运行时期;
数组中出现的两个异常:java.lang.ArrayIndexOutOfBoundsException: 数组角标越界
出现的原因是访问了数组中不存在的索引值;
解决方案:观察数组中索引值到多少;如果int [] arr =null; 输出arr[0]; 此时输出异常:NullPointerException:空指针异常;(实际开发异常最多的) 出现原因是对象为空,而开发者还要去使用对象,那么就会出现问题; 解决方案:判断一下if(arr!=null){再输出对象},这样即可解决; OOM异常:OutOfMemory:内存溢出; 使用app时,比如这个app携带大量的图片,一直再往下刷新,有时app退出, 你下拉的速度远不及加载的速度,加载要求释放掉,你下拉太慢, 已经释放掉了,娇内存溢出; 解决方案: 使用第三方的软件,比如ImageLoader等;
6.数组中的length;
数组中的length属性,arr.length;可以在静态初始化后直接算出里面的元素量;
同理 arr.length-1;可以算出索引的大小;
区分:
还有一个length()方法,是字符串中运用的,用来计算字符串的长度;
以上是关于数组的基础理解的主要内容,如果未能解决你的问题,请参考以下文章