【JAVA-模块五 数组】

JAVA-模块五 数组

  • 一、数组(一维)
    • 1.1数组是什么?
    • 1.2java中数组静态初始化:(存)
      • 两种定义格式:
      • 数组初始化格式:
      • 静态初始化后,打印数组名:
    • 1.3 数组元素访问(取):
      • 静态数组访问格式:
      • 数组遍历,数组长度速算:数组名.length
    • 1.4数组的动态初始化:
    • 1.5数组内存图:
      • 两个数组指向相同的内存图:
      • 方法的传参传递问题(传值和传址):
        • 1 参数是基本数据类型:传递的是数据值
        • 2 参数是引用数据类型:传递的是地址值
    • 1.6 数组常见问题:
  • 二、二维数组:
    • 2.1二维数组的静态初始化:
    • 2.2二维数组的访问:
    • 2.3 二维数组遍历:
    • 2.4 二维数组动态初始化:
    • 2.5 二维数组内存图:
  • 三 、其他:

一、数组(一维)

1.1数组是什么?

数组是一种容器,用于存放同种数据类型的多个值

1.2java中数组静态初始化:(存)

初始化概念:在内存中为数组开辟空间,并且存放的过程

静态初始化:怎么体现出静态,

两种定义格式:

格式1:
在这里插入图片描述

格式2:(更推荐,跟C语言更接近)
在这里插入图片描述

这两种定义格式,只是定义了数组类型的变量,内存中并没有创建数组容器。

数组初始化格式:

完整格式:

数据类型[ ] 数组名 =new数据类型[ ]{ 元素1,元素2,元素3,…}

简化格式(实际使用):

数据类型[ ] 数组名 ={ 元素1,元素2,元素3,…}(省略了new和数据类型)

静态初始化后,打印数组名:

[I@4eec7777
[I@3b07d329

[ ---->表示当前空间是数组类型

@ ----->表示分隔符,没有实际意义

I ------>表示当前数组类型是int类型

后面的一串数字是16进制数,是数组的地址

1.3 数组元素访问(取):

静态数组访问格式:

数组名[索引],索引就是下标(从0开始)

数组遍历,数组长度速算:数组名.length

概念:将所有元素都取出,但是当数组比较长的时候,计数过于鸡肋

选择使用length动态获取数组的长度(元素的个数)

格式为 :数组名.length,返回值为数组长度

1.4数组的动态初始化:

动态初始化概念:指定数组的长度后,系统会自动为数组分配默认值(数组初始化),来存储相应的默认数据

格式:在这里插入图片描述
动态初始化默认值分类:

  • 整形类型(,short,int,long) :0

  • 小数类型(float,double):0.0

  • 布尔类型:false

  • 字符型:‘\u0000’---->U ni code字符,也是一种字符,常见的体现是空白体现

  • 引用数据类型:null

java中的引用数据:数组,类,接口

String:本质是一个类,因此字符串本质是类


动态初始化:手动指定数组的长度,系统给出默认初始化值(初始化了元素的个数)

静态初始化:手动指定数组元素,系统会根据元素个数,计算出数组长度(初始化了具体的元素)

使用范围:
使用数组的动态初始化:只明确了元素个数,不清楚具体的数值
使用数组的静态初始化:需求给出明确要存储的数据—>静态初始化

1.5数组内存图:

java中的内存分配:

(1)栈(方法运行进入的内存)

(2)堆(new出来的就会在堆内存中开辟空间并产生地址,有new进堆)

(3)方法区(字节码文件会加载至方法区)

示例:

在这里插入图片描述
在这里插入图片描述
整个数组的地址赋给arr进行存储:
在这里插入图片描述

arr[0]=44:通过arr数组名在堆内存中找到这个数组,再根据索引值找到0号元素

两个数组指向相同的内存图:

数组名记录的是数组的地址:

通过赋值后,两打印结果一样(array1和array2指向的是同一个数组)
在这里插入图片描述

方法的传参传递问题(传值和传址):

java到底是值传递还是址传递?

1 参数是基本数据类型:传递的是数据值

2 参数是引用数据类型:传递的是地址值

在这里插入图片描述

方法调用之后,打印输出的值仍然是100(类比传值调用)

要想对数number进行修改,调用修改后需要有返回值:(传值调用要想对变量的值进行修改)
在这里插入图片描述

栈区执行过程:
在这里插入图片描述

传递的数组名存储的是数组的地址调用(传址调用):
在这里插入图片描述

第二次打印的值为66

栈区和堆区的执行过程:
在这里插入图片描述

1.6 数组常见问题:

问题1 数组的越界异常:越界访问数组

问题2 空指针异常:
在这里插入图片描述

当引用数据类型的变量被赋值为null(空)之后,表示和堆内存的连接被切断,这时候再访问堆内数据,空发生空指针异常。(被赋予null后找不到堆内存中的数据)

二、二维数组:

二维数组介绍:

二维数组也是一种容器,用于存储一维数组(容器的嵌套)

使用范围:操作数为多组

2.1二维数组的静态初始化:

完整格式:
在这里插入图片描述

简化格式:等号右边省略new 数据类型[ ] [ ]
在这里插入图片描述

public class ArrayDemo1 {
    public static void main(String[] args) {
        int[][] arr={
                {11,22,33},
                {44,55,66},
                {77,88,99},
        };
        System.out.println(arr);
    }
}

打印数组名的结果是一串地址:
在这里插入图片描述

两个[ [表示是二维数组

对二维数组进行打印:
在这里插入图片描述

二维数组存储一维数组时,存储的是一维数组的地址值

2.2二维数组的访问:

访问格式:

数组名[ m ] [ n ];

m索引指定访问一维数组的序号,n指定访问的一维数组中元素的序号
在这里插入图片描述

2.3 二维数组遍历:

arr[i表示的每一个一维数组(的地址)

可以将二维数组中存储的一维数组的地址存放在一个对应类型的一维数组中

整理思路:

步骤1 遍历二维数组,获取每一个一维数组

步骤2 继续遍历一维数组,获取具体的元素

public static void printArray(int[][] arr){
    for (int i = 0; i < arr.length; i++) {
        //arr[i]表示每一个一位数组
        int[] temp=arr[i];//抽出二维数组中的某个一维数组
        for (int j = 0; j < temp.length; j++) {
            System.out.println(temp[j]);
        }
    }
}

精进后->

public static void printArray(int[][] arr){
    for (int i = 0; i < arr.length; i++) {
        //arr[i]表示每一个一位数组
        int[] temp=arr[i];//抽出二维数组中的某个一维数组
        for (int j = 0; j < arr[i].length; j++) {
            System.out.println(arr[i][j]);
        }
    }
}

2.4 二维数组动态初始化:

格式:指定分配内存空间的大小,先不存数
在这里插入图片描述

也会有默认值(和一维数组动态初始化的默认值类型一样)

可以将提前初始化好的一维数组存放到二维数组中:

public static void main(String[] args) {
    int[] arr1={11,22,33};
    int[] arr2={44,55,66};
    int[][] arr=new int[2][3];
    arr[0]=arr1;//将arr1存放到二维数组中的0号索引位置
    arr[1]=arr2;//将arr2存放到二维数组中的1号索引位置
    for (int i = 0; i < arr.length; i++) {
        for (int j = 0; j < arr[i].length; j++) {
            System.out.println(arr[i][j]);
        }
    }
}

2.5 二维数组内存图:

在这里插入图片描述
进行了地址的替换

栈中:
在这里插入图片描述
堆中:
在这里插入图片描述

三 、其他:

1 批量修改变量名:选中后,shift+F6

2 将主函数中部分内容独立为方法(抽调方法):选中后ctrl+Alt+m
3 IDEA 数组遍历的快捷键:-------->数组名.fori

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/14833.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL高级篇——存储引擎和索引

导航&#xff1a; 【黑马Java笔记踩坑汇总】JavaSEJavaWebSSMSpringBoot瑞吉外卖SpringCloud黑马旅游谷粒商城学成在线牛客面试题_java黑马笔记 目录 一、存储引擎 1.1、查看、设置存储引擎的命令 1.2、InnoDB引擎 1.2.1、介绍 1.2.2、优势 1.2.3、InnoDB事务的ACID特性…

SpringCloud --- Eureka注册中心

一、场景 假如我们的服务提供者user-service部署了多个实例&#xff0c;如图 思考几个问题&#xff1a; order-service在发起远程调用的时候&#xff0c;该如何得知user-service实例的ip地址和端口&#xff1f; 有多个user-service实例地址&#xff0c;order-service调用时该…

【c语言】带你快速理解函数的传值和传址

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 给大家跳段街舞感谢支持&#xff01;ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ…

Linux 内存 pt.1

哈喽大家好&#xff0c;我是咸鱼 今天我们来学习一下 Linux 操作系统核心之一&#xff1a;内存 跟 CPU 一样&#xff0c;内存也是操作系统最核心的功能之一&#xff0c;内存主要用来存储系统和程序的指令、数据、缓存等 关于内存的学习&#xff0c;我会尽量以通俗易懂的方式…

适合学生的平价蓝牙耳机有哪些?学生平价蓝牙耳机推荐

随着蓝牙耳机的使用越来越频繁&#xff0c;近几年也出现了很多优质的蓝牙耳机&#xff0c;不仅有着超高的性价比&#xff0c;而且使用体验也有了很大的突破。接下来&#xff0c;我来给大家推荐几款适合学生使用的平价蓝牙耳机&#xff0c;可以当个参考。 一、南卡小音舱Lite2蓝…

C4D的GPU渲染器Octane和Redshift的渲染对比

对CG圈创作人员来说&#xff0c;除制作软件外渲染器是平时接触最多的一类软件&#xff0c;用渲染器进行渲染的过程&#xff0c;就是把制作软件里的预览效果变到融合材质、光照、物理特性的最终效果的这个过程&#xff0c;这是CG制作中最重要的一步&#xff0c;关乎着最终效果的…

新手必看!ChatGPT常见问题总整理,你遇到了几个?

随着ChatGPT火爆全球,使用人数以指数型成长,许多使用上的问题呈现在网路上。 今天这篇文章会用实作的方式带大家了解ChatGPT有哪些常见问题,以此减少踩坑的机会。 并用简单的示例让大家感受GPT-3.5与GPT-4的能力差异,希望对大家有所帮助。 大家会有这些问题,其实就是希望…

HashMap底层源码解析及红黑树分析

HashMap线程不安全&#xff0c;底层数组链表红黑树 面试重点是put方法&#xff0c;扩容 总结 put方法 HashMap的put方法&#xff0c;首先通过key去生成一个hash值&#xff0c;第一次进来是null&#xff0c;此时初始化大小为16&#xff0c;i (n - 1) & hash计算下标值&a…

8 年后端开发,API 设计的学习方法分享

笔者目前在参与一个开源项目&#xff0c;平时接触多的也是 API 相关的核心功能开发&#xff0c;经常会有读者私信我&#xff0c;对于开发新人而言&#xff0c;如何快速学习 API 设计&#xff0c;我简单总结了一下&#xff1a; 1. 学习基础知识&#xff1a;学习HTTP、RESTful AP…

有哪家台灯好又便宜的适合学生党使用?真正合格的小学生台灯

都说眼睛是心灵的窗户&#xff0c;但是现在很多小朋友还没上初中&#xff0c;可能就早早的近视了。究其原因&#xff0c;除了和频繁观看电子屏幕密不可分之外&#xff0c;不良的用眼习惯也是一大关键。孩子写作业时不时揉眼睛的动作&#xff0c;其实只要时间一长&#xff0c;眼…

GWO灰狼优化算法以及Matlab代码

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 GWO灰狼算法原理进化更新位置更新&#xff08;紧随3只头狼&#xff09; GWO灰狼算法流程图GWO优化算法matlab代码main函数适应度函数GWO主体代码测试结果F1~ F6测试…

如何正确选择集体渲染(云渲染)和gpu离线渲染

在数字娱乐领域&#xff0c;渲染是制作高质量影像的关键步骤之一。随着技术的不断发展和应用的广泛普及&#xff0c;渲染方式也在不断演进。目前&#xff0c;集体渲染&#xff08;云渲染&#xff09;和GPU离线渲染是两种比较流行的渲染方式。那么&#xff0c;哪种方式会更快呢&…

Docker-compose

目录 第一章.Docker-compose 概述 1.1.Docker-compose使用场景 1.2.简介 第二章.compose 部署 2.1.Docker Compose 环境安装 2.2.YAML 文件格式及编写注意事项 2.3.Docker Compose配置常用字段 2.4.Docker Compose 常用命令 2.5.Docker Compose 文件结构 第三章.实验…

Koordinator 一周年,新版本 v1.2.0 支持节点资源预留,兼容社区重调度策略

作者&#xff1a;佑祎、吕风 背景 Koordinator 是一个开源项目&#xff0c;基于阿里巴巴在容器调度领域多年累积的经验孵化诞生&#xff0c;可以提升容器性能&#xff0c;降低集群资源成本。通过混部、资源画像、调度优化等技术能力&#xff0c;能够提高延迟敏感的工作负载和…

3个月,从功能测试进阶到自动化测试涨薪10k,我悟了....

因为我最近在分享自动化测试技术&#xff0c;经常被问到&#xff1a; 功能测试想转自动化&#xff0c;请问应该怎么入手&#xff1f;有没有好的资源推荐&#xff1f; 那么&#xff0c;接下来我就结合自己的经历聊一聊我是如何在工作中做自动化测试的。&#xff08;学习路线和…

macOS 13.4Beta 3(22F5049e)With OpenCore 0.9.2开发版 and winPE双引导分区原版镜像

镜像特点 完全由黑果魏叔官方制作&#xff0c;针对各种机型进行默认配置&#xff0c;让黑苹果安装不再困难。系统镜像设置为双引导分区&#xff0c;全面去除clover引导分区&#xff08;如有需要&#xff0c;可以自行直接替换opencore分区文件为clover引导文件&#xff09;备注…

云服务器使用jenkins+docker自动化部署SpringBoot项目

docker 安装jenkins&#xff0c;就这一步都恶心死了 //拉取镜像&#xff0c;踩了很多坑&#xff0c;用其它版本的镜像插件一直安装失败&#xff0c;最后用的是lts版本&#xff08;基础版&#xff09; 用其它版本要么是连不上插件的下载地址&#xff0c;要么是插件下载不成功 d…

【应急响应】后门攻击检测指南Rookit内存马权限维持WINLinux

文章目录 Windows实验常规后门&#xff1a; 网络对外连接查看 自启动测试&#xff1a;隐藏账户映像劫持屏保&登录 Linux实验常规后门&#xff1a;Rootkit后门&#xff1a;GScan rkhunter权限维持后门&#xff1a;GScan rkhunter Web层面&#xff1a;通用系统层面 主机层面后…

大数据技术之SparkCore

第1章 RDD概述 1.1 什么是RDD RDD&#xff08;Resilient Distributed Dataset&#xff09;叫做弹性分布式数据集&#xff0c;是Spark中最基本的数据抽象。 代码中是一个抽象类&#xff0c;它代表一个弹性的、不可变、可分区、里面的元素可并行计算的集合。 RDD代表的是弹性、…

【Pytorch】六行代码实现:特征图提取与特征图可视化

前言 之前记录过特征图的可视化&#xff1a;Pytorch实现特征图可视化&#xff0c;当时是利用IntermediateLayerGetter 实现的&#xff0c;但是有很大缺陷&#xff0c;只能获取到一级的子模块的特征图输出&#xff0c;无法获取内部二级子模块的输出。今天补充另一种Pytorch官方…