一、数组的静态初始化。
1、数组的静态初始化 及内存图
静态初始化的格式:
格式1: 数据类型[] 数组名 =new 数据类型[]{元素1,元素2,元素3……}
例如: int[] arr = new int[]{2,3,5,6};
格式2:
数组静态初始化的 格式2 ,是格式1的简写方式。
数据类型[] 数组名 = {元素1,元素2,元素3……};
例如: String[] arr2 = {"I","like","teacher!"};
内存图解析:
1、局部变量进栈
成员变量:在类中,方法外声明的变量,称之为,成员变量
局部变量: 方法内,或者方法上的变量,称之为局部变量。
2、 方法进栈
3、new 出来的对象进堆。
补充: char 类型数据的默认值\u0000
每个创建在堆内存中数组
都有对应的地址值,方便变量引用。
2、通过练习,书写两种静态初始化,并且,我们测试两个常见运行时异常。
空指针异常 : NullPointerException
数组角标越界异常: ArrayIndexOutOfBoundsException
** 空指针异常出现场景: 当我们访问的数组不存在了的时候,就会报这个错
被内存删除,销毁了。
(内存有自动清理不用的垃圾的机制。)
** 数组角标越界异常出现场景:
访问了,不存在的数组角标的时候,就会报这个异常。
public class Test01_Exception {
public static void main(String[] args) {
//创建第一种格式的静态初始化数组。
String[] ban_ji = new String[]{"A277班","A281班","A267班"};
//创建第二种格式的静态初始化数组。
double[] salary = {100.32, 23.32,19999999.11,44.55};
//验证数组角标越界异常。访问不存在的索引。
// System.out.println(ban_ji[3]);
//验证空指针异常。当变量在内存中没有引用的时候,访问该变量就会空指针。
salary = null; // 给一个变量的引用置空。手动让系统回收堆内存东西
System.out.println(salary); //null
System.out.println(salary[2]);
}
}
3、数组的遍历。怎么样获取到数组中每一个元素。
获取到这些元素,可以用来计算,输出等等。
for(int i = 0; i < 数组的长度; i++){
数组类型 元素变量名 = 数组名[i];
数组中的元素可以做很多操作,比如用来计算,用来输出查看结果
}
public class Test02_BL {
public static void main(String[] args) {
//静态初始化,定义一个数组。
int[] arr ={21,32,44,56,31,456};
//遍历数组。for循环初始化条件初始值为数组最小角标0
// 判断条件,初始化变量小于数组长度,
for (int i = 0; i < arr.length; i++) {
//获取数组每一个元素
int a = arr[i];
//输出打印数组的每一个元素。
System.out.print(a +",");
}
}
}
4、数组的练习,求数组中,最大值。
需求: 定义int类型一个数组,并且循环遍历数组
然后找到这个数组中的,最大的一个值是多少。
分析: 静态初始化,直接赋值一些 int类型的数值。
通过for循环遍历数组。获取每一个元素
判断该元素,是否是最大值?
先默认第一个元素是最大值。
在循环外定义一个变量 int max =arr[0];
遍历每一个元素,和max 进行比较,
比max 大的,就赋值给max
最后遍历完所有,则max 就是数组中的最大值。
代码:
public class Test03_GetMax {
public static void main(String[] args) {
//数组静态初始化,直接赋值一些 int类型的数值、
int[] arr = {23,34,21,22,57,88,567};
//先默认第一个元素是最大值。
//在循环外定义一个变量 int max =arr[0];
int max =arr[0];
//通过for循环遍历数组。获取每一个元素
for (int i = 0; i < arr.length; i++) {
//遍历每一个元素,和max 进行比较,
int a = arr[i];
if (a > max) {
//比max 大的,就赋值给max
max = a ;
System.out.println(max);
}
}
System.out.println("----------------------");
System.out.println(max);
}
}
5、数组元素的反转练习。
需求: 定义一个int 类型的数组。写6-10个元素。
然后在遍历该数组的过程中,交互数组元素的位置,
实现,数组中,元素位置的反转。
例如: int a = {1,2,3,4,5,6};
反转后 : int a ={6,5,4,3,2,1};
提示:通过数组角标的交换。重新赋值。
可以创建一个中间变量,用来交换接收
具体代码:
public class Test03_FZ {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5,6};
//反转后 : int[] a ={6,5,4,3,2,1};
for (int i = 0; i < arr.length/2; i++) {
//在循环中定义一个零时变量。
int temp =0;
//把第一个元素赋值给零时变量
temp = arr[i];
//把最后一个元素给第一个元素。
arr[i] = arr[arr.length -1-i];
// 把temp 现在的值,赋值给最后面的元素。
arr[arr.length -1-i] = temp;
}
//完成反转后,遍历,输出 数组的元素。
for (int i = 0; i < arr.length; i++) {
System.out.print (arr[i] +",");
}
}
}
快捷键扩展:
修改一边量名,让所有该变量位置的名字统一改变。
选中变量名 alt + shift + r 组合键操作。
6、查找,数组中,指定的 元素(练习)
通过索引,找元素。
需求:
之前想输入一个数,让他对应输出星期几。
switch case语句。
用数组的方式来实现:
String[] arr = {"","星期一","星期二","星期三","星期四","星期五","星期六","星期日",};
注意:(知识点)
(1)声明赋值问题
动态初始化,声明和赋值可以写在一行,也可以不写在一行。
int[] arr ;
arr = new int[4];
* 但是静态初始化,必须,声明和赋值都在同时完成。
(2)动静结合的方式声明一个数组行不行?
int[] arr = new int[3]{1,2,3,4,5,6};
注意: 动静结合方式初始化数组不行
直接会报错。
分析: 如何实现
键盘录入一个数。1-7 之间。
然后程序代码,执行,输出对应的星期几。
步骤:
(1)创建键盘录入对象,导包,
(2)定义一个String[]类型的数组。元素是星期几。
(3)判断键盘录入对象,接收的数是多少,
(4)遍历 String 数组,
(5)输出对应索引的元素。
代码:
public class Test05_XQ {
public static void main(String[] args) {
//(1)创建键盘录入对象,导包,
Scanner sc = new Scanner(System.in);
//(2)定义一个String[]类型的数组。元素是星期几。
String[] week = {"","星期一","星期二","星期三","星期四","星期五","星期六","星期日"};
//(3)判断键盘录入对象,接收的数是多少,
System.out.println("请输入1-7之间的 数,为您输出对应的星期:");
int num = sc.nextInt();
//(4)遍历 String 数组,
for (int i = 0; i < week.length; i++) {
//(5)输出对应索引的元素。
if (num == i) {
System.out.println("您输入的数,对应的是:" + week[i]);
}
}
}
}
7、通过指定内容,查找数组中,是否有相同元素。
如果有,就返回它的对应的索引。
需求: 要求,编写方法,方法返回值为数组的元素类型。
然后参数列表是,我们想要查找的内容。
然后在main 方法中,调用该方法,
如果数组中有与查找指定内容匹配的元素
那么就返回 他的索引给调用的地方,用变量接收。
并输出打印,他的索引。
8、二维数组的创建和基本格式。(了解)
(1)二维数组的格式 1
int[][] arr = new int[3][20];
(2)二维数组的格式 2
int[][] arr2 = new int[3][];
(3) 二维数组的格式 3
int[][] arr3 = {{1,2,3,4},{3,44},{2,3,4},{5,6}};
9、 遍历二维数组。
需求: 遍历二维数组,把二维数组中的元素输出查看。
提示:用双层for循环,来实现。遍历二维数组。
10、 求int 类型二维数组中,所有元素的和。
需求:
定义一个二维数组代表年。
定义二维数组中的 一维数组,代表季度。
在代表季度的数组中,写入每个月的销售额的对应数值。
然后通过遍历二维数组,获取到每个一维数组元素。
进行累加求和后,得到全年 整体 销售额是多少。