Java基础笔记14——数组
数组:一种引用类型的数据
一、特点:
1.指定数据类型 2.指定长度
二、声明可以有两种方式:
(1)数据类型 数组名[];
(2)数据类型[] 数组名;
三、创建:
数组名 = new 数据类型[N];
四、声明的同时创建:
数据类型 数组名[] = new 数据类型 [N];
五、声明的同时完成初始化:
(1)动态初始化:使用new创建数组后,所有元素已经被初始化,元素都是默认值
数据类型 数组名[] = new 数据类型 []{元素1, 元素2 , 元素3...};
(2)静态初始化:不使用new,而是在声明的同时完成创建和初始化工作
数据类型 数组名[] = {元素1, 元素2 , 元素3...};
六、赋值:
数组名[索引] = 值;
七、取值:
数组名[索引]
八、属性:
length:获取数组长度(元素个数)
九、遍历:
(1)使用for循环遍历
for (int i = 0; i < 数组名.length; i++) {
System.out.println(数组名[i]);
}
(2)使用forEach遍历
for(数组数据类型 变量名: 数组){
System.out.prinln(变量名);
}
十、常见的错误:
(1)java.lang.NullPointerException(空指针异常)
(2)java.lang.ArrayIndexOutOfBoundsException(数组下标越界异常)
十一、栈和堆:
stack(栈):由系统分配,大小限制,先进后出
一般用于保存基本数据类型的局部变量与引用类型的地址值
heap(堆):由程序员控制,当使用new关键字时,开辟heap(堆)内存空间,用于保存引用对象的元素的值,先进先出
一般用于保存引用对象的属性值或数组的元素值
十二、例子:
package com.lqh.chapter01; public class _12array { public static void main(String[] args) { //1.声明 int[] int_list = null; //开辟stack(栈)内存空间,用于保存引用对象的地址值,此时地址为null System.out.println(int_list); //System.out.println(int_list.toString());//空指针异常,不能使用对象中的任何方法,因为此时地址为null //2.创建关键字时,开辟heap(堆)内存空间,用于保存引用对象的元素的值 int_list = new int [5]; //使用new System.out.println(int_list);//[I@123a439b //3.声明的同时创建 String[] str_list = new String[10]; //4.声明的同时完成初始化 double[] double_list = new double[] {1.2,3.2,3.4,2.1,5.3}; double[] double_list2 = {1.2,3.2,3.4,2.1,5.3}; //5.赋值 int[] int_list2 = new int [3]; int_list2[0] = 0; int_list2[1] = 1; int_list2[2] = 2; //6.取值 System.out.println(int_list2[0]+"\t"+int_list2[1]+"\t"+int_list2[2]); //System.out.println(int_list2[4]);//数组下标越界异常,因为数组长度为3,下标是从0-3 //7.属性 System.out.println("int_list2数组的长度为:"+int_list2.length); //8.遍历 //(1)for循环遍历数组 for (int i = 0; i < int_list2.length; i++) { System.out.println("数组的第"+(i + 1)+"个元素:"+int_list2[i]); } //(2)使用forEach遍历 int i = 0; for(int elment: int_list2) { i++; System.out.println("数组的第"+i+"个元素:"+elment); } } }
输出结果为:
null
[I@123a439b
0 1 2
int_list2数组的长度为:3
数组的第1个元素:0
数组的第2个元素:1
数组的第3个元素:2
数组的第1个元素:0
数组的第2个元素:1
数组的第3个元素:2