Java学习Day10

Java数组02

3. 内存分析

 

  • ArrayIndexOutOfBoundsException(数组下标越界了)

  • 对于数组定义的图解

 

  • 我的理解:

  1. 首先再栈之中声明一个数组。

  2. 堆中是存放数组的元素。

  3. 在堆中创建数组并给数组中的元素赋值。

  • 数组的默认初始化

  1. 由于数组是引用类型,它的元素就相当于类的实例变量,因此数组一经分配空间,

  2. 其中的每一个元素也都会按照实例变量同样的方式被隐式初始化

  1. 即当数组的长度为10时,你只给第0个赋值了,1-9都为该类型的默认值(如int类型的就为0,String类型的就为null),

  1. 如果你调取了第10那么就超过数组长度,就会报错了。

4. 数组的四个基本特点

  1. 当其长度确定以后,数组一旦被创建,它的大小就不可被改变。

  2. 数组的元素必须是相同类型不允许出现混合类型

  3. 数组中的元素可以是任何数据类型,包括基本类型和引用类型

  4. 数组变量属引用类型时,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量

  5. 数组本身就是对象,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.ArrayIndexOutOfBoundsException
  • ArrayIndexOutOfBoundsException:数组下标越界异常

6. 小结:

  1. 数组时相同数据类型(数据类型可以为任意类型)的有序集合

  2. 数组也是对象。数组元素相当于对象的成员变量

  3. 数组长度是确定的,不可变的。如果越界就会报**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数组

  • 注:

  1. return指使整个方法返回,后面不管是循环里还是循环外都不执行了

  2. 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来供我们使用

  • 基于此就能对数据对象及逆行一些基本的操作

  • 具有一下几个常用的功能

  1. array.sort =》对数组进行排序

  2. 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,但是要在上课的时候看看文献了,多搞懂一点就能在组会上多讲一点东西,加油加油。

  希望番禺疫情能够缓解一下,下周三我就去学车去,希望到时老师能够不介意我整天不在课题组。我下午就回来哈哈!

  来到华工的第二个星期了,感觉时间过的真快,希望能够在这里学有所成把。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值