java- 数组基本知识
一维数组的基本知识
数组
定义:就像一个容器,可以存储多个相同数据类型的元素
-
存储的数据类型:基本数据类型,引用数据类型(数组,类,接口,枚举等等)
-
数组创建的语法格式:int[] arr=new int[5]
- 数据类型[]数组名=new 数据类型[数组长度]
-
初始化:
-
目的:数组初始化才能使用。初始化是为存储元素的开辟空间。并为每个元素赋值。
-
静态初始化:给出初始化值,系统决定长度。
- 格式:数据类型 []数组名=new 数组类型[]{数据};
- 简化格式:数据类型[]数组名={数据};
-
动态初始化:数据类型[ ]数组名=new 数据类型[数组长度],给出长度,系统给开辟空间并赋值。
数据类型 默认赋值 int,byte,short,long 0 double,float 0.0 boolean false char ‘\u0000’ 引用数据类型 null 注意:两种初始化方式只能选择一种。不能动静结合。
-
Java中内存的分配以及栈和堆的区别。
Java虚拟机在执行Java程序的过程中会把它管理的内存划分成若干个不同的数据区域
- 栈:存放的是局部变量。
- 局部变量:在方法定义中或者方法声明上的变量都是局部变量。
- 堆:存放的是new出来的东西。
- 每次new出来的东西都会为其分配空间并赋值。
- 每个变量都有一个默认值。
- 使用完毕之后就变成垃圾,等待垃圾回收器处理。
- 方法区:
- 本地方法区:(和系统相关)
- 寄存器:(cpu使用)
Java内存分配区域
两个数组的内存图解
- class文件进入方法区
- 加载main方法。
- int[]arr1 数组在栈内存中加载,
- 在堆内存中new一个空间,存放三个长度数组,并赋值0
- 将开辟的空间的地址给int[]arr1 ,arr1就指向堆内存
- 然后arr1[0]=200运行,将200赋值到0索引处,将默认值覆盖掉。
- arr2和arr1开辟空间流程相同。
- 然后运行输出语句。
三个引用两个数组的内存图
- 三个引用和两个数组的内存加载方法和两个数组内存的加载方法相同,却别区别是arr3=arr1.
- 将arr1赋值给arr3,也就是将arr1的地址给arr3,所以arr3也就指向arr1开辟的空间,
- 给arr3赋值就会改变0x001地址里面的数据。
数组常见的两个问题
-
索引越界:
- 当你访问没有对应的角标元素,就出现数组索引越界异常。
- ArrayIndexOutOfBoundsException:数组索引越界异常
- 数组定义完毕后,长度是固定不变的,访问时要注意
- 数组长度使用的快捷方式:数组名.length
- 当你访问没有对应的角标元素,就出现数组索引越界异常。
-
空指针异常:
- 把数组的引用人为置空(置空方法:arr=null),就指向不到堆内存的那块空间。就出现空指针异常。
- NullPointerException:空指针异常
- 如果放在最后置空(数组用完之后置空,)就可以让垃圾回收器及早回收数组空间。
- 把数组的引用人为置空(置空方法:arr=null),就指向不到堆内存的那块空间。就出现空指针异常。
数组案例:
数组反转和遍历:
数组元素查找(查找指定元素第一次在数组中出现的索引)
- 注意:
- 字符串的录入接收:String i=sc.nextLine();
- 判断字符串是否相等:不是用= = , = =判断数值型数据两端的值。.equals()判断字符串两端是否相等。