1、为什么使用数组?
比如我要统计每位员工的的工资,我得定义多个变量分开存储,如果过多的员工,太麻烦了。
那我怎么用一个变量去存储多个员工的工资呢?
可以使用数组,数组就是一个大的容器,它可以存放多个值。
2、什么是数组?
数组和变量差不多,都是存放数据的,不同的是变量只能保存一条数据,而数组可以保存多条数据,前提这多条数据必须是同一类型的。
数组是引用数据类型。
3、如何定义数组?
数组类型[] 数组名;
如果定义好数组以后,一定要给数组进行初始化。
数组的初始化分为两种情况:
**(1)动态初始化:**指定数组的长度,一旦长度确定,就是数组中只能存放多少数据
两种格式:
第一种:数组类型[] 数组名=new 数组类型[数组长度];
//1.定义了一个数组并动态初始化
第二种:
数组类型[] 数组名;
数组名=new 数组类型[数组长度];
//2.第2种动态初始化
**(2)静态初始化:**不是指定数据长度了,而是在初始化的同时,给数组赋值
两种格式:
第一种:数组类型[] 数组名=new 数组类型[]{数据1,数据2……};
//3.静态初始化第一种
第二种:数组类型[] 数组名;数组名=new 数组类型[]{数据1,数据2……};
//4.静态初始化第二种
(3)最简单的方法
数据类型[] 数组名={数据1,数据2……};
//5.最简单
//6.我想获取数组的长度:
数组名.length
数组的长度一旦定义不可以改变
//7.常见的几种异常
数组越界异常:ArrayIndexOutOfBoundsException
Int[]a=newint[2]
System.out.println(“a[2]”);//错的
空指针异常:NullPointerException
Int[] b=null;
System.out.println(“b[0]”);//错的
4、数组的遍历
Int[] array=newint[]{1,2,3,4,5}
//我想获取数组的每一个元素
//1.使用for循环,i代表数组的下标System.out.println(“使用for循环遍历数组”);
For(int i=0;i<array.length;i++){
System.out.println(array[1]);
}
//2.foreach(for循环的增强版)
System.out.println(“使用foreach循环遍历数组”)
//for(定义变量接收数组的每一个元素值:数组名)
for(int a:array){
System.out.println(a);
}
5、数组的分类
(1)基本数据类型的数组:
动态初始化后,数组都会赋予一个默认值Byte(0) short(0) int(0) long(0) double(0.0) float(0) char(空格) boolean(false)
(2)引用数据类型的数组
String、接口、自己定义类等
引用数据类型的默认值是null
6、Java中的内存怎么分配?
(1)栈(Stack):主要存放局部变量(2)堆(Heap):凡是new出来的东西都放在堆里面。
堆当中的数据都有默认原则:
Byte(0) short(0) int(0) long(0) double(0.0) float(0) char(空格) boolean(false) 因你用数据类型(null)
(3)方法区(Method Area):存放的是与class文件相关的信息
(4)本地方法区(Native Method Area):与操作系统有关
(5)寄存器(Register):与CPU有关7、冒泡排序核心思想:
数组中的元素两两比较(n个数比较n-1趟,n个数第t趟比较n-t次)
**口诀:**n个数字来排队两两比较小(大)靠前外层循环n-1内层循环n-1-i
**八、二维数组:**数组中的数组
1.声明二维数组:
数据类型[][] 数组名;
第一个中括号:二维数组中有几个一维数组(行)
第二个中括号:每个一维数组中有多少个元素(列)
2.初始化二维数组
(1)第一种方式:动态初始化
//1.创建一个二维数组并动态初始化
//5代表5行或者表示包含5个一维数组
//7代表7列或者表示每个一维数组的长度是7
int[][] array=new int[5][7];
//2.如何赋值
//第一个一维数组的第一个元素值为10
array[0][0]=10;
//第四个一维数组的第七个元素的值是5
array[3][6]=5;
(2)第二种方式:静态初始化
int[][] array=new int[][]{{1,2},{2,3,4},{5,9,89,1}};
(3)简写
int[][] array={{1,2},{2,3,4},{5,9,89,1}};
3.遍历二维数组
//使用for循环,外层循环控制行(每一个一维数组)
for(int i=0;i<array.length;i++){
//内循环控制的是列
for(int j=0;j<array[i].length;j++){
syso(array[i][j]);
}
}
//使用增强for循环
for(int[] i:array){
for(int a:i){
syso(a);
}
}