Java数组02
3. 内存分析

ArrayIndexOutOfBoundsException(数组下标越界了)
对于数组定义的图解

我的理解:
首先再栈之中声明一个数组。
堆中是存放数组的元素。
在堆中创建数组并给数组中的元素赋值。
数组的默认初始化
由于数组是引用类型,它的元素就相当于类的实例变量,因此数组一经分配空间,
其中的每一个元素也都会按照实例变量同样的方式被隐式初始化。
即当数组的长度为10时,你只给第0个赋值了,1-9都为该类型的默认值(如int类型的就为0,String类型的就为null),
如果你调取了第10那么就超过数组长度,就会报错了。
4. 数组的四个基本特点
当其长度确定以后,数组一旦被创建,它的大小就不可被改变。
数组的元素必须是相同类型,不允许出现混合类型。
数组中的元素可以是任何数据类型,包括基本类型和引用类型。
数组变量属引用类型时,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。
数组本身就是对象,Java中的对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的。
5. 数组边界
下标的合法区间为[0,length-1],如果越界就会报错,
如:
package com.Ym.array;
public class ArrayDemo02 {
public static void main(String[] args) {
//静态初始化:创建 + 赋值
int[] a = {1,2,3,4,5,6,7,8};//静态数组
System.out.println(a[0]);
for (int i = 0; i <= a.length; i++) {//这里等于就取了8就越界了,区间为[0,7]的
System.out.println(a[i]);
}//java.lang.ArrayIndexOutOfBoundsExceptionArrayIndexOutOfBoundsException:数组下标越界异常
6. 小结:
数组时相同数据类型(数据类型可以为任意类型)的有序集合
数组也是对象。数组元素相当于对象的成员变量
数组长度是确定的,不可变的。如果越界就会报**ArrayIndexOutOfBoundsException!**
7. 数组的使用
1. 普通的For循环
package com.Ym.array;
public class ArrayTestDemo01 {
public static void main(String[] args) {
int[] array = {1,2,3,4,5};
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
}
}通过For循环遍历整个数组后打印出来
2. For-Each循环
public class ArrayTestDemo01 {
public static void main(String[] args) {
int[] arrays = {1,2,3,4,5};
// for (int i = 0; i < array.length; i++) {
// System.out.println(array[i]);
//array.for自动生成
//JDK1.5,没有下标就可以遍历数组中的所有元素
for (int array : arrays) {
System.out.println(array);
}
}
}3. 数组作方法入参
package com.Ym.array;
public class ArrayTestDemo02 {
public static void main(String[] args) {
int[] arrays = {1,2,3,4,5};
printArrays(arrays);
}
public static void printArrays(int[] arrays){
for (int i = 0; i < arrays.length; i++) {
System.out.println(arrays[i]);
}
}
}在main方法之外设置一个打印的方法,就可以在main方法中使用。
注意形式为
public static 数据类型 方法名(对象){
方法代码
}4. 反转数组
public class ArrayTestDemo03 {
public static void main(String[] args) {
int[] arrays = {1,2,3,4,5};
int[] reverse = reverse(arrays);//reverse(arrays)+alt+回车自动返回
printArrays(reverse);
}
public static int[] reverse(int[] arrays){
int[] result = new int[arrays.length];
for (int i = 0, j = result.length-1; i <result.length ; i++, j--) {
result[j] = arrays[i];
}
return result;
}
public static void printArrays(int[] arrays){
for (int i = 0; i < arrays.length; i++) {
System.out.println(arrays[i]);
}
}
}研究了一个下午的反转数组,感觉挺难理解的,不过现在大概能理解个七八层了
在main方法外面设置了一个反转数组,通过这些代码来实现反转arrays数组
注:
return指使整个方法返回,后面不管是循环里还是循环外都不执行了
break是用来跳出循环的,但是不会跳出方法
alt + 回车 指的是使idea自动创建一个相应的变量,并起名字,能够提高效率
Java数组03
1. 二维数组
多维数组可以看成是数组的数组,比如二位数组就是一个特殊的一维数组,其每一个元素都是一个一维数组
可以将二位数组当作一个学校,学校中有班级,班级中有学生

二维数组
int a[][] = new int[2][5];//定义形式
遍历的方法
int[][] array = {{1,2},{2,3},{3,4},{4,5}};//类似于坐标吧
System.out.println(array.length);//4,二维数组的长度
System.out.println(array[0].length);//2,二维数组中第一个元素的长度
System.out.println(array[0]);//[I@1b6d3586,是错误的
System.out.println(array[0][0]);//1:第一个元素(一维数组)里的第一个元素
System.out.println(array[0][1]);//2:第一个元素(一维数组)里的第二个元素
printArray(array[0]);
System.out.println("=============================");
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
System.out.println(array[i][j]);
}
}
}
public static void printArray(int[] arrays){//int[] arrays 是一个数组
for (int i = 0; i < arrays.length; i++) {
System.out.println(arrays[i] + " ");
}
}
}2. Arrays类
数组的工具类java.util.Arrays
由于数组对象本身并没有什么方法可以让我们对其进行操作,API就提供了一个工具类Arrays来供我们使用
基于此就能对数据对象及逆行一些基本的操作
具有一下几个常用的功能
array.sort =》对数组进行排序
System.out.println(Arrays.toString(a))=》将整个数组打印出来,包括中括号
public static void printArray(int[] a){
for (int i = 0; i < a.length; i++) {
if (i == 0){
System.out.print("[");
}
if (i == a.length-1){
System.out.print(a[i] + "]");
}else {
System.out.print(a[i]+", ");
}
}
}//这就相当于Arrays.toString(a)1. Arrays.fill(a,数字)=》对数组填充
Arrays.fill(a,n,m,数字)=》对第n个元素到第m个元素(左开右闭)进行填充
2. Arrays.equals=》比较数组中的元素值是否相等
3. 通过binarySearch方法能对排序好的数组进行二分查找法操作
2022.9.17 星期六
加班的一天,这个星期过的真的十分的充实,充实到我都有点累了,在健身房疯狂运动的一周,体重也降到了90kg以下了,进度挺不错,希望我姐婚礼的时候能到85kg,到过年的时候到80kg以下,这是我的小flag。
明天是满课,所以不一定有时间学习java,但是要在上课的时候看看文献了,多搞懂一点就能在组会上多讲一点东西,加油加油。
希望番禺疫情能够缓解一下,下周三我就去学车去,希望到时老师能够不介意我整天不在课题组。我下午就回来哈哈!
来到华工的第二个星期了,感觉时间过的真快,希望能够在这里学有所成把。