【JAVA-模块五 数组】

news2024/11/22 0:33:29

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

win11 环境下streamlit使用pycharm debug

目录 1. pycharm中配置run 脚本2. streamlit3. 开始debug调试 1. pycharm中配置run 脚本 &#xff08;一&#xff09;点击 Edit Configurations,按图操作. 2. streamlit 1.streamlit 安装在 anaconda 的 base 环境&#xff08;随意哈&#xff0c;安装哪里都可以&#xff0c…

Zookeeper 面试题总结

Zookeeper 1、工作中 Zookeeper 有什么用途吗2、zookeeper 数据模型是什么样的3、那你知道 znode 有几种类型呢4、你知道 znode 节点里面存储什么吗5、每个节点数据最大不能超过多少呢6、你知道 znode 节点上监听机制嘛7、那你讲下 Zookeeper 特性吧8、你刚提到顺序一致性&…

LRU缓存淘汰策略——面试高频

⭐️前言⭐️ 本文主要介绍在面试中常见的高频手撕算法题目&#xff0c;LRU算法&#xff0c; &#x1f349;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f4dd;私信必回哟&#x1f601; &#x1f349;博主将持续更新学习记录收获&#xff0c;友友们有任何问题可以在评论区…

LEVIR-CD遥感建筑变化检测数据集

LEVIR-CD是一个新的大规模遥感二元变化检测数据集&#xff0c;它将有助于开发新的基于深度学习的遥感图像变化检测算法。 下载地址&#xff1a;https://justchenhao.github.io/LEVIR/ 历史消息 20230311:我们为LEVIR_CD中的每个样本补充了地理空间信息&#xff08;例如&#…

实例分割算法BlendMask

实例分割算法BlendMask 论文地址&#xff1a;https://arxiv.org/abs/2001.00309 github代码&#xff1a;https://github.com/aim-uofa/AdelaiDet 我的个人空间&#xff1a;我的个人空间 密集实例分割 ​ 密集实例分割主要分为自上而下top-down与自下而上bottom-up两类方法…

Node.js代码实例:简单Web服务端

文章目录 前言代码仓库为什么要写一份Node.js简单Web服务端的代码实例&#xff1f;内容目录结构代码server.jsindex.htmlindex.cssindex.jsvalue.html 结果总结参考资料作者的话 前言 Node.js代码实例&#xff1a;简单Web服务端。 代码仓库 yezhening/Programming-examples: …

LVS-DR

系列文章目录 文章目录 系列文章目录一、1.2. 二、实验1.2. 总结 一、 1. 2. 二、实验 1. 先把四台机器都关闭防火墙和安全机制 vim /etc/sysconfig/selinux把selinux都改成disabled 在NFS里面建立两个共享目录 给文件执行权限并写入内容给html 和www vim /etc/expor…

【C++】C++中的类型转化

说起类型转化&#xff0c;我们在C语言之前的学习中可以了解到&#xff0c;类型转换可以分为两种情况&#xff1a;隐式类型转化&#xff1b;显示类型转化。但是为什么在c中还要继续对类型转化做文章呢&#xff1f;我们一起来看&#xff1a; 目录 1. C语言中的类型转换 2. C强制…

【Transformer系列(5)】Transformer代码超详细解读(Pytorch)

前言 前面几篇我们一起读了transformer的论文&#xff0c;更进一步了解了它的模型架构&#xff0c;这一篇呢&#xff0c;我们就来看看它是如何代码实现的&#xff01; &#xff08;建议大家在读这一篇之前&#xff0c;先去看看上一篇模型结构讲解 这样可以理解更深刻噢&…

Python 基础(十二):字典

❤️ 博客主页&#xff1a;水滴技术 &#x1f338; 订阅专栏&#xff1a;Python 入门核心技术 &#x1f680; 支持水滴&#xff1a;点赞&#x1f44d; 收藏⭐ 留言&#x1f4ac; 文章目录 一、声明字典1.1 使用 {} 声明字典1.2 使用 dict 函数声明字典1.3 声明一个空的字典 二…

【数据结构】AVLTree

1.AVL树的概念 二叉搜索树虽可以缩短查找的效率&#xff0c;但如果数据有序或接近有序二叉搜索树将退化为单支树&#xff0c;查找元素相当于在顺序表中搜索元素&#xff0c;效率低下。因此&#xff0c;两位俄罗斯的数G.M.Adelson-Velskii 和E.M.Landis在1962年 发明了一种解决上…

会话与会话技术(Session)

前言 Cookie将用户的信息保存在各自的浏览器中&#xff0c;并且可以在多次请求下实现数据的共享。但是如果当传递的信息较多时&#xff0c;Cookie技术会增大服务器程序处理的难度&#xff0c;因此&#xff0c;Servlet提供了另一种会话技术————Session&#xff0c;Session可…

跟李沐学AI——实用机器学习(入门版)

机器学习目录 2.1 探索性数据分析 2.2 数据清理 2.3 数据变换 2.4 特征工程 2.5 数据科学家的日常 Stanford University Practical machine learning 2.1 探索性数据分析 ​ 对目标的ftr数据进行处理&#xff0c;针对不同的信息做出不同的图形 输出数据集的行数和列数以及前十…

ArcGIS Pro地理空间数据处理完整工作流实训及python技术融合

GIS是利用电子计算机及其外部设备&#xff0c;采集、存储、分析和描述整个或部分地球表面与空间信息系统。简单地讲&#xff0c;它是在一定的地域内&#xff0c;将地理空间信息和 一些与该地域地理信息相关的属性信息结合起来&#xff0c;达到对地理和属性信息的综合管理。GIS的…

1、TI335x环境建立

记录裸机开发&#xff0c;TI A8系列处理器的AM335x过程&#xff0c;本次开发的是3352&#xff0c;在此基础上开发。 1、硬件准备&#xff1a; 已经测试调试ok的3352测试板&#xff0c;经过查看发现&#xff0c;am3352引出的下载接口是JTAG口&#xff0c;而我手里只有Jlink&…

Kubernetes---Pod调度、标签、配额、策略

静态pod 静态pod由user直接创建调用&#xff0c;不能迁移 由kebelet守护进程直接管理的pod&#xff0c;无需APIserver监管 kubelet监视每个静态pod 静态pod永远绑定到一个指定节点上的kubelet 静态pod spec不能引用其他API对象 静态pod配置路径/var/lib/kubelet/config.yaml里面…

CSS背景相关属性

一、背景颜色 属性名&#xff1a;background-color (bgc) 属性值&#xff1a;颜色取值&#xff1a;关键字&#xff0c;rgb表示法&#xff0c;rgba表示法&#xff0c;十六进制表示。 注&#xff1a; 背景颜色默认透明&#xff1a;rgba&#xff08;0&#xff0c;0&#xff0c…

C语言积锦

代码区&#xff1a;text 代码执行二进制码&#xff08;程序指令&#xff09; 具有共享、只读特性 数据区&#xff1a;1.初始化数据区data 2.未初始化数据区 bss 3.常量区 栈区&#xff1a;系统为每一个程序分配一个临时的空间 局部变量、函数信息、函数参数、数组。栈区大…

干货|Graphpad Prism也能做ERP图?So Easy!

Hello&#xff0c;大家好&#xff01; 这里是壹脑云科研圈&#xff0c;我是喵君姐姐~ 不知道你是否注意过这样一个现象。 在心理学大会报告的时候&#xff0c;专家经常会说一句话&#xff1a; 这个结果很漂亮&#xff01;&#xff01;&#xff01; 第一次听见的时候&#x…

K8s图形化管理工具Dasboard部署及使用

文章目录 一、Dashboard简介二、Dashboard部署安装三、配置Dashboard登入用户1、通过Token令牌登入2、通过kubeconfig文件登入 四、Dashboard创建容器 一、Dashboard简介 Kubernetes Dashboard是一个Web UI&#xff0c;用于管理Kubernetes集群中的应用程序和资源。它提供了一个…