Java学习 - 黑马 - 随堂笔记 - 09_数组

2023-05-16

Java学习 - 黑马 - 随堂笔记 - 09_数组

1. 数组定义格式

3.1 数组概述

在这里插入图片描述

a=100

b=100

c=100

d=100

e=100

… …

  • 一次性声明大量的用于存储数据的变量
  • 要存储的数据通常都是同类型数据,例如:考试成绩

1.2 什么是数组

数组(array)是一种用于存储多个相同类型数据的存储模型

1.3 数组的定义格式

  • 格式一:数据类型[] 变量名
    • 范例:int[] arr
    • 定义了一个int类型的数组,数组名是arr
  • 格式二:数据类型 变量名[]
    • 范例:int arr[]
    • 定义了一个int类型的变量,变量名是arr数组

2. 数组初始化之动态初始化

2.1 数组初始化概述

Java中的数组必须先初始化,然后才能使用

所谓初始化:就是为数组中的数组元素分配内存空间,并为每个数组元素赋值

2.2 数组初始化方式

  • 动态初始化
  • 静态初始化

2.3 动态初始化

动态初始化:初始化时只指定数组长度,由系统为数组分配初始值

  • 格式:数据类型[] 变量名 = new 数据类型[数组长度];
  • 范例:int[] arr = new int[3];
package com.itheima_01;
public class ArrayDemo {
public static void main(String[] args) {
    int[] arr = new int[3];
    /*
        左边:
            int:说明数组中元素类型是int类型
            []:说明这是一个数组
            arr:这是数组的名称
        右边:
            new:为数组申请内存空间
            int:说明数组中的元素类型是int类型
            []:说明这是一个数组
            3:数组长度,其实就是数组中的元素个数
     */
}
}

3. 数组元素访问

3.1 数组元素访问

  • 数组变量访问方式
  • 格式:数组名
  • 数组内部保存的数据的访问方式
  • 格式:数组名[索引]

索引是什么?

在这里插入图片描述

在这里插入图片描述

  • 索引是数组中数据的编号方式
  • 作用:索引用于访问数组中的数据使用,数组名[索引]等同于变量名,是一种特殊的变量名
  • 特征①:索引从0开始
  • 特征②:索引是连续的
  • 特征③:索引逐一增加,每次加1
package com.itheima_01;

public class ArrayDemo {
public static void main(String[] args) {
    int[] arr = new int[3];
    /*
        左边:
            int:说明数组中元素类型是int类型
            []:说明这是一个数组
            arr:这是数组的名称
        右边:
            new:为数组申请内存空间
            int:说明数组中的元素类型是int类型
            []:说明这是一个数组
            3:数组长度,其实就是数组中的元素个数
     */
    //输出数组名
    System.out.println(arr);//[I@43a25848

    //输出数组中的元素
    System.out.println(arr[0]);
    System.out.println(arr[1]);
    System.out.println(arr[2]);

}
}

4. 内存分配

4.1 Java中内存分配

Java程序在运行时,需要在内存中分配空间。为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。

int[] arr = new int[3];
//输出数组名及元素
System.out.println(arr);
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);

在这里插入图片描述

数组在初始化时,会为存储空间添加默认值

  • 整数:0
  • 浮点数:0.0
  • 布尔值:false
  • 字符:空字符
  • 引用数据类型:null

在这里插入图片描述

  • 栈内存:存储局部变量

定义在方法中的变量,例如:arr

使用完毕,立即消失

  • 堆内存:存储new出来的内容(实体,对象)

数组在初始化时,会为存储空间添加默认值

​ 整数:0

​ 浮点数:0.0

​ 布尔值:false

​ 字符:空字符

​ 引用数据类型:null

每一个new出来的东西都有一个地址值

使用完毕,会在垃圾回收器空闲时被回收

4.2 数组内存图 (单个数组)

在这里插入图片描述

在这里插入图片描述

package com.itheima_02;
//单个数组
public class ArrayTest01 {
    public static void main(String[] args) {
        //定义一个数组
        int[] arr = new int[3];

        //输出数组名及元素
        System.out.println(arr);
        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);

        //给数组中的元素赋值
        arr[0] = 100;
        arr[2] = 200;
        System.out.println("===========");

        //再次输出数组名及元素
        System.out.println(arr);
        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);
    }
}

4.3 数组内存图(多个数组)

在这里插入图片描述

在这里插入图片描述

package com.itheima_02;
//单个数组
public class ArrayTest02 {
    public static void main(String[] args) {
        //定义两个数组
        int[] arr = new int[2];
        int[] arr2 = new int[3];

        //输出数组名及元素
        System.out.println(arr);
        System.out.println(arr[0]);
        System.out.println(arr[1]);

        System.out.println(arr2);
        System.out.println(arr2[0]);
        System.out.println(arr2[2]);

        //分别给数组中的元素赋值
        arr[0] = 100;
        arr2[0] = 200;
        arr2[2] = 300;
        System.out.println("===========");

        //再次分别输出数组名及元素
        System.out.println(arr);
        System.out.println(arr[0]);
        System.out.println(arr[1]);

        System.out.println(arr2);
        System.out.println(arr2[0]);
        System.out.println(arr2[2]);
    }
}


4.4 数组内存图(多个数组指向相同)

在这里插入图片描述

在这里插入图片描述

当两个数组指向相同的时候,任何一个数组修改了堆内存里面的数据,另一个去访问的时候,元素值也发生了改变

package com.itheima_02;
//多个数组指向相同
public class ArrayTest03 {
    public static void main(String[] args) {
        //定义一个数组
        int[] arr = new int[3];
        arr[0] = 100;
        arr[1] = 200;
        arr[2] = 300;
        System.out.println(arr);
        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);

        //定义第二个数组指向第一个数组
        int[] arr2 = arr;
        arr2[0] = 111;
        arr2[1] = 222;
        arr2[2] = 333;
        System.out.println(arr2);
        System.out.println(arr2[0]);
        System.out.println(arr2[1]);
        System.out.println(arr2[2]);
    }
    }


5. 数组初始化之静态初始化

5.1 数组初始化之静态初始化

静态初始化:初始化时指定每个数组元素的初始值,由系统决定数组长度

  • 格式:数据类型[] 变量名=new 数据类型[]{数据1,数据2,数据3…};
  • 范例:int[] arr = new int[]{1,2,3};
  • 简化格式:数据类型[] 变量名 = {数据1,数据2,数据3,…};
  • 范例:int[] arr = {1,2,3};
package com.itheima_03;

public class ArrayDemo {
    public static void main(String[] args) {
        //定义数组
        int[] arr = {1,2,3};

        //输出数组名
        System.out.println(arr);

        //输出数组中的元素
        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);
    }
}

6. 数组操作的两个常见小问题

6.1 数组操作的两个常见小问题

  • 索引越界:访问了数组中不存在的索引对应的元素,造成索引越界问题

在这里插入图片描述

在这里插入图片描述

  • 空指针异常:访问的数组已经不再指向堆内存的数据,造成空指针异常

在这里插入图片描述

在这里插入图片描述

  • null:空值,引用数据类型的默认值,表示不指向任何有效对象

7. 数组常见操作

7.1 遍历

在这里插入图片描述

如果数据有100万呢?

在这里插入图片描述

7.2 获取数组元素数量

在这里插入图片描述

  • 格式:数组名.length
  • 范例:arr.length

在这里插入图片描述

  • 遍历通用格式
int[] arr = {......};
for(int x=0;x<arr.length;x++){
	arr[x]//对arr[x]进行操作
}
package com.itheima_05;

public class ArrayTest01 {
    public static void main(String[] args) {
        //定义数组
        int[] arr = {11,22,33,44,55,66,77,88,99};
        
        //使用通用的遍历格式
        for (int x = 0; x < arr.length; x++) {
            System.out.println(arr[x]);
        }
    }
}

7.3 获取最值

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

package com.itheima_05;

public class ArrayTest02 {
    public static void main(String[] args) {
        //定义数组
        int[] arr = {12,45,98,73,60};

        //定义一个变量,用于保存最大值
        //取数组中第一个数据作为变量的初始值
        int max = arr[0];

        //与数组中剩余的数据逐个比对,每次比对将最大值保存到变量中
        for (int x = 1; x < arr.length; x++) {
            if (arr[x]>max){
                max = arr[x];
            }
        }

        //循环结束后打印变量的值
        System.out.println("max:"+max);
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java学习 - 黑马 - 随堂笔记 - 09_数组 的相关文章

随机推荐

  • 移远EC20--1 AT命令初始3

    接上篇 一 xff1a AT指令电话簿命令 AT 43 CNUM xff1a 用户编号 该命令可以从 xff08 U xff09 SIM中获取用户自己的编号 AT 43 CPBF xff1a 查找电话簿条目 该命令可以从用AT 43 CPB
  • ROS学习笔记(一)之 成功安装(melodic版)

    Ubuntu18 04安装ROS Melodic 详情请参考 xff1a https blog csdn net haiyinshushe article details 84256137 1 配置Ubuntu软件库 xff1a 配置Ubu
  • oracle数据库新增用户

    文章目录 前言一 通过PL SQL客户端新增二 通过创建命令进行新增1 创建语句 总结 前言 用的比较少 xff0c 用到时记录一下 一 通过PL SQL客户端新增 1 连接成功后 xff0c 在左侧对象 users右键 新建 xff0c
  • 长度单位&颜色RGB值&十六进制颜色RGB值

    长度单位 amp 颜色RGB值 amp 十六进制颜色RGB值 span class token doctype lt DOCTYPE html gt span span class token tag span class token ta
  • stm32学习之定时器中断时间设置与计算

    嗯 在stm32中经常使用定时器 xff0c 但是一直没有学会怎样计算定时器的时间 xff0c 近期简单学习了一下做一下总结记录 首先我们会在主函数里边定义时钟的最高频率为72Mhz 使用SysTick Init 72 定义 如下方代码所示
  • keil 下载安装 保姆级教程

    一 前言 最近被安排开发一个单片机的项目 xff0c 回头想了一下 xff0c 自己上次弄单片机的时候 xff0c 还都是在大学期间 xff0c 到现在也有三四年没有碰过了 xff0c 大部分的知识点都忘了 xff0c 所以又重新的把以前的
  • ST-Link使用教程

    1 电脑安装软件 2 点击确定 3 下一步 4 下一步 5 下一步 6 下一步 7 下一步 8 等待安装完成 9 等待 10 完成安装 11 打开 ST Visual Programmer 12 选择芯片 13 选择芯片类型 xff08 S
  • mapreduce的原理和简单程序实现

    五个关于mapreduce的简单程序实现 mapreduce的简介 什么是mapreduce xff1f 是一种分布式运算程序 一个mapreduce程序会分成两个阶段 xff0c map阶段和reduce阶段 map阶段会有一个实体程序
  • js简单事件解释(基础)

    nbsp nbsp nbsp 事件 事件概念 组件触发了某个动作 触发代码的执行 nbsp 点击事件 onclick nbsp 单击事件 nbsp 组件被单击所触发的事件 ondbclick 双击事件 焦点事件 nbsp nbsp inpu
  • JavaEE-面试-POI面试回答思路

    是什么 xff1f Apache POI是Apache开源的 可以通过Java读写word和excel 难不难 xff1f 不难 它的出现解决什么问题 xff1f 导出word或者excel xff08 报表 xff09 xff0c 方便数
  • 树莓派原生系统安装ROS(含网络代理,ROS编译安装以及ROS小车制作过程)

    本文将自主搭建树莓派ROS自主导航小车 目前已经完成的有 xff1a 1 树莓派初始化配置 2 树莓派局域网网络代理 3 树莓派ros安装 4 hector slam安装 5 自制阿克曼底盘控制 python 以下为全文链接 xff1a 树
  • 比较对象的方法——equals()和hashCode()方法

    equals equals是Object中的一个方法 xff0c 用于判断两个对象是否相同 一般会被重写来使用 Object中的equals定义为 xff1a span class token keyword public span spa
  • OpenCores 介绍

    关于 OpenCores OpenCores是一个开源的硬件项目网站 xff0c 里面有很多利用Verilog VHDL SystemVerilog 等硬件描述语言建模 设计的项目 xff0c 适合FPGA和ASIC开发 好多熟悉FPGA设
  • pytorch中张量的创建和张量中数据类型的转化

    1 使用torch tensor 函数创建张量 张量的最基本的创建方法和Numpy中创建Array的格式是一致的 xff0c 都是 创建函数 序列 的格式 xff0c 张量的创建函数 xff1a torch tensor t1 61 tor
  • 一文吃透VSCode中git的相关配置与使用

    本篇文章带大家聊聊VSCode 43 Git操作 xff0c 介绍一下VSCode中git的相关配置与使用 xff0c 希望对大家有所帮助 xff01 xff08 本文操作均在 Gitee 上进行 xff0c Gitee 与 Github
  • 如何安装并管理多版本node?方法介绍

    如何安装并管理多版本node xff1f 下面本篇文章给大家介绍一下多版本node的安装与切换详细操作 xff0c 希望对大家有所帮助 xff01 安装多版本node的原因 xff1a 在项目开发过程中 xff0c 不同项目使用的nodej
  • 软件工程复习(九):面向对象方法学引论

    面向对象方法学引论 面向对象方法学 主要观点 1 客观世界是由各种对象组成的 2 所有对象划分成了各种对象类 xff0c 每个对象类定义了一组数据和一组方法 这也是与面向过程设计的最大不同 xff0c 面向对象将二者分开 3 按照父类和子类
  • 记录一下关于国民技术单片机(N32G457)无法用MDK(Keil5)进行下载程序以及在线仿真的原因

    最近在学习使用国民技术的单片机来驱动无刷直流电机 xff0c 但是因为MDK对这个单片机支持没那么好 xff0c 所以没办法下载程序以及在线仿真调试 只能是添加了国民技术单片机的固件库之后 xff0c 编译程序没啥问题了 因为平常下载程序都
  • MacOS 安装brew失败解决方法

    MacOS 安装brew失败解决方法 报错信息解决方法 报错信息 error RPC failed curl 28 LibreSSL SSL read Operation timed out errno 60 fatal expected
  • Java学习 - 黑马 - 随堂笔记 - 09_数组

    Java学习 黑马 随堂笔记 09 数组 1 数组定义格式 3 1 数组概述 a 61 100 b 61 100 c 61 100 d 61 100 e 61 100 一次性声明大量的用于存储数据的变量要存储的数据通常都是同类型数据 xff