【Java寒假打卡】Java基础-数组学习笔记

一、定义

数组是一个容器,存储一种数组类型的多个值

二、定义格式

在这里插入图片描述

  • int [] a;
  • int a[];

三、数组动态初始化

package com.ustc.base.DataFormat;

public class test7 {
    public static void main(String[] args) {
        int[] a = new int[5];// 创建一个int类型的数组容器

        System.out.println(a);// 打印数组地址
        // [I@10f87f48
        // @ 分隔符
        // [ 当前的空间是一个数组类型
        // 当前数组容器所存储的数据类型 int 类型
        // 10f87f48 表示十六进制内存地址

        byte[] bArr = new byte[3];// 创建一个byte数组
        System.out.println(bArr);
    }
}

四、数组元素访问

package com.ustc.base.DataFormat;

public class test7 {
    public static void main(String[] args) {
        int[] a = new int[5];// 创建一个int类型的数组容器

        System.out.println(a);// 打印数组地址
        // [I@10f87f48
        // @ 分隔符
        // [ 当前的空间是一个数组类型
        // 当前数组容器所存储的数据类型 int 类型
        // 10f87f48 表示十六进制内存地址

        // 系统自动分配的默认初始化值
        System.out.println(a[0]);
        System.out.println(a[1]);

        a[0] = 1;
        a[1] = 2;
        a[3] = 3;

        System.out.println(a[0]);
        System.out.println(a[1]);
        System.out.println(a[3]);
    }
}


五、内存分配

  • 栈内存:方法运行时,进入的内存,局部变量都存放于这块内存中
  • 堆内存:new出来的内容都会进入堆内存,并且会存在地址值
  • 方法区:字节码文件class 加载时进入的内存
  • 本地方法栈:调用操作系统相关资源
  • 寄存器:交给cpu去使用

在这里插入图片描述

  • 程序运行 该类的字节码文件加载进入方法区
  • main方法存放在字节码文件中
  • main方法被JVM自动调用 进入栈内存
  • arr数组变量在Main方法中声明
  • 将地址值交付给main方法中的arr变量
  • 通过new关键字在堆内存中开辟空间 并产生地址值 因为new的事长度为3的数组,所以会划分为三个小块,每一个格子有他的索引和默认值
  • 将地址值付给Main方法中的arr变量
  • 数组名相当于地址 所以相当于位置

数组类型的默认值:

在这里插入图片描述

引用数据类型:引用、记录了地址值的变量,所对应的数据类型,就是引用数据类型

多个数组的不同内存图:不同的数组名,在堆中开辟不同的数组地址

在这里插入图片描述

数组内存图:每new一次,在堆内存中都是一块新的空间,堆内存中的空间地址不会出现重复的现象。

六、多个数组的不同内存图

package com.ustc.base.DataFormat;

public class test8 {
    public static void main(String[] args) {
        int[] arr1 = new int[2];
        arr1[0] = 11;
        arr1[1] = 12;

        int[] arr2 = arr1;// 引用数据类型 两个数组名指向相同的内存
        arr2[0] = 33;

        System.out.println(arr1[0]);
        System.out.println(arr1[1]);
        System.out.println("---------------");
        System.out.println(arr2[0]);
        System.out.println(arr2[1]);

    }
}


在这里插入图片描述

七、数组的静态初始化

  • int [] arr = new int[]{1,2,3,4,5}; // 静态初始化 方法一
  • int [] arr = {1,2,3,4,5};// 静态初始化 方法二
package com.ustc.base.DataFormat;

public class test9 {
    public static void main(String[] args) {
        int[] arr = new int[]{1,2,3,4};
        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);
        
        int[] arr1 = {1,2,3,4,5};
        System.out.println(arr1[2]);
        System.out.println(arr1[3]);
    }
}


两种初始化的区别:

  • 动态初始化:手动指定数组长度,由系统给出默认初始化值
  • 静态初始化:手动指定数组元素,系统会根据元素个数,计算数组的长度

使用场景:

  • 动态初始化:只明确元素个数,不明确具体数值,推荐使用动态初始化
  • 静态初始化:需求中已经明确了要操作的具体数据,直接静态初始化即可

八、数组操作的两个小问题

  • 数组越界问题
  • 空指针异常 null 找不到数组内存地址

九、求数组的最大值

package com.ustc.base.DataFormat;

public class test9 {
    public static void main(String[] args) {
        int[] arr = new int[]{1,2,3,4};
        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);

        int[] arr1 = {1,2,3,4,5};
        System.out.println(arr1[2]);
        System.out.println(arr1[3]);

        int max = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if(arr[i] > max)
            {
                max = arr[i];
            }
        }

        System.out.println(max);
    }
}

十、查找数组的特定值

package com.ustc.base.DataFormat;

import java.util.Scanner;

public class test10 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个要查找的数字");
        int num = sc.nextInt();
        
        int arr[] = {1,2,3,4,5};
        for (int i = 0; i < arr.length; i++) {
            if(arr[i] == num)
            {
                System.out.println("找到了");
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

少写代码少看论文多多睡觉

求打赏,求关注,求点赞

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值