java数组基础详解

news2024/11/24 14:55:27

目录

      • java数组基础详解
        • 一、引言
        • 二、声明数组
        • 三、初始化数组
          • 3.1 静态初始化
          • 3.2 动态初始化
        • 四、访问数组元素
        • 五、遍历数组
        • 六、分析数组内存
        • 七、数组常见异常
          • 7.1 索引越界异常ArrayIndexOutOfBoundsException
          • 7.2 空指针异常NullPointerException

java数组基础详解

一、引言

数组定义

数组是一种数据结构,用来存储同一类型值的集合

继基本数据类型后,为什么还要学数组?

变量虽然也能存储数据,但是存储的数据有限。
为了避免变量名的冗余以及为了方便对同一类型的数据进行操作,便有了数组。

二、声明数组

格式一:数据类型[] 数组名

int[] array;

格式二:数据类型 数组名[]

int array[];

注释:大多数java程序员喜欢第一种风格

三、初始化数组

什么是初始化?

在内存中,为数组容器开辟空间,并将数据存入容器的过程

注意:未经初始化的数组不可以使用,如下所示:在这里插入图片描述

java中初始化分为静态初始化和动态初始化

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

完整格式:数据类型[] 数组名=new 数据类型[]{元素1,元素2,元素3…};

int[] array=new int[]{1,2,3,4};

简化格式:数据类型[] 数组名={元素1,元素2,元素3…};

int[] array={1,2,3,4};
3.2 动态初始化

格式:数据类型[] 数组名=new 数据类型[数组长度];

int[] arr=new int[3];

动态初始化:手动指定数组长度,由系统给出默认初始化值,如下所示:
请添加图片描述
例子:

        int[] arr = new int[3];
        System.out.println(arr[1]);

        int[][] array1 = new int[2][];
        for (int i = 0; i < 2; i++) {
            System.out.println(array1[i]);//默认初始化为null
        }
        int[][] array2=new int[2][3];
        for (int i = 0; i < 2; i++) {
            System.out.println(array2[i]);
        }
        System.out.println(array2[0][0]);

运行结果

0
null
null
[I@4eec7777
[I@3b07d329
0

四、访问数组元素

访问数组元素

格式:数组名[索引];
索引:索引是数组容器中空间的编号,编号从0开始,逐个+1增长

例子:

int[] array={1,2,3}
System.out.println(array);//打印数组名
System.out.println(array[0]);//访问数组中第一个元素

运行结果

[I@4eec7777
1

那么,数组名中存放的 [I@4eec7777是什么意思呢?

  • [:表示当前空间为数组类型
  • I:表示当前数组的数据类型为int类型
  • @:分隔符
  • 4eec7777:数组在内存中的十六进制地址

总结一下:

数组名:数组地址
数组名[索引]:数组元素

五、遍历数组

方法一:for循环

int[] array={1,2,3};
for (int i = 0; i < array.length; i++) {
    System.out.println(array[i]);
}

方法二:for each 循环

int[] array={1,2,3};
for(int element:array){
    System.out.println(element);
}

六、分析数组内存

java内存分配介绍

方法区:字节码文件加载时进入的内存
栈内存:方法运行时所进入的内存
堆内存:new出来的东西会在这块内存中开辟空间并产生地址(今天学的数组便是)

例子1:

int[] array1={1,2,3};
int[] array2=array1;
for(int element:array2){
    System.out.println(element);
}
System.out.println("array1的地址为:"+array1);
System.out.println("array2的地址为:"+array2);

运行结果:

1
2
3
array1的地址为:[I@682a0b20
array2的地址为:[I@682a0b20

结论:

array1在堆空间中开辟出了一块空间,在运行时,栈空间记录的是array1在堆空间的地址。
随后又将array1中记录的地址值赋值给了array2,所以array2与array1所指向的是同一块空间。

例子2:
请添加图片描述

结论:

数组名中存储的是arr在堆空间的地址,所以在change方法中可以改变arr中元素的值。

七、数组常见异常

7.1 索引越界异常ArrayIndexOutOfBoundsException

当访问了数组中不存在的索引,就会引发索引越界异常

7.2 空指针异常NullPointerException

当引用数据类型变量被赋值为 null 之后,地址的指向被切断,还继续访问堆内存数据,就会引发空指针异常

例子:

int[] array1={1,2,3};
array1=null;
System.out.println(array1);//会报空指针异常

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

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

相关文章

裸辞了,面试了几十家软件测试公司,终于找到想要的工作

上半年裁员&#xff0c;下半年裸辞&#xff0c;有不少人高呼裸辞后躺平真的好快乐&#xff01;但也有很多人&#xff0c;裸辞后的生活五味杂陈。 面试了几十家终于找到心仪工作 因为工作压力大、领导PUA等各种原因&#xff0c;今年2月下旬我从一家互联网小厂裸辞&#xff0c;没…

【C语言进阶】结构体、位段、枚举、以及联合(共用体)的相关原理与使用

​ ​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;C语言进阶 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录1.结构体1.1 概述&a…

代码随想录【Day22】| 235. 二叉搜索树的最近公共祖先、701. 二叉搜索树中的插入操作、450. 删除二叉搜索树中的节点

235. 二叉搜索树的最近公共祖先 题目链接 题目描述&#xff1a; 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个结点 p、q&#xff0c;最近公共祖先表示为一个结点 x&#xff0c;满足 x 是 …

别担心ChatGPT距离替代程序猿还有距离

经过多天对chat-GPT在工作的使用&#xff0c;我得出一个结论&#xff0c;它睁眼瞎说就算了&#xff0c;它还积极认错&#xff0c;绝不改正&#xff0c;错误答案极具误导性&#xff0c;啥也不说了&#xff0c;请看图。 经过N次较量它固执的认为 0011 1101 0110 0101在最高位是左…

【python】考前复习,python基础语法知识点整理

文章目录1.常量与表达式2.变量和数据类型创建变量数据类型动态类型数据类型的转换3.注释4.字符串字符串的定义方式字符串的拼接字符串的格式化①字符串格式化的精度控制字符串的格式化②对表达式进行格式化5.从控制台输入(input)6.运算符算术运算符赋值运算符布尔类型和比较运算…

【Spring Cloud Alibaba】006-OpenFeign

【Spring Cloud Alibaba】006-OpenFeign 文章目录【Spring Cloud Alibaba】006-OpenFeign一、概述1、Java 项目实现接口调用的方法HttpclientOkhttpHttpURLConnectionRestTemplate WebClient2、Feign 概述二、Spring Cloud Alibaba 快速整合 OpenFeign1、添加依赖2、启动类加注…

STM32开发(12)----CubeMX配置WWDG

CubeMX配置窗口看门狗&#xff08;WWDG&#xff09;前言一、窗口看门狗的介绍二、实验过程1.STM32CubeMX配置窗口看门狗2.代码实现3.硬件连接4.实验结果总结前言 本章介绍使用STM32CubeMX对窗口看门狗定时器进行配置的方法。门狗本质上是一个定时器&#xff0c;提供了更高的安…

物联网在物流行业中的应用

物流管理需要同时监控供应链、仓储、运输等多项活动&#xff0c;然而许多因素会影响物流流程本身并导致延迟。为了简化流程和提高客户满意度&#xff0c;一些行业领导者和决策者积极创新&#xff0c;不断评估并使用物联网对物流流程的成本效益进行深入优化。在本文中&#xff0…

初识MySQL下载与安装【快速掌握知识点】

目录 前言 MySQL版本 MySQL类型 MySQL官网有.zip和.msi两种安装形式&#xff1b; MySQL 下载 1、MySQL 属于 Oracle 旗下产品&#xff0c;进入Oracle官网下载 2、点击产品&#xff0c;找到MySQL 3、进入MySQL页面 4、点击Download&#xff08;下载&#xff09;&#x…

PHP面向对象03:命名空间

PHP面向对象03&#xff1a;命名空间一、命名空间基础二、子空间三、命名空间访问1. 非限定名称2. 限定名称3. 完全限定名称四、全局空间五、命名空间应用六、命名空间引入一、命名空间基础 namespace&#xff0c;是指人为的将内存进行分隔&#xff0c;让不同内存区域的同名结构…

在uniapp 中使用Ucharts 进行可视化图表开发,折线统计图。

首先我们得 在uniapp 插件市场中找到Ucharts 这款插件&#xff0c;我这里是使用uni_modules导入这款插件案例1:我们这时可以在页面中使用组件的方式进行使用<qiun-data-charts type"area" :chartData"chartData" :opts"opts"/>Js逻辑的代…

基于vue考研助手网站

可定制框架:ssm/Springboot/vue/python/PHP/小程序/安卓均可开发目录 1 绪论 1 1.1课题背景 1 1.2课题研究现状 1 1.3初步设计方法与实施方案 2 1.4本文研究内容 2 2 系统开发环境 4 3 系统分析 6 3.1系统可行性分析 6 3.1.1经济可行性 6 3.1.2技术可行性 6 3.1.3运行可行性 6 …

我的 System Verilog 学习记录(3)

引言 本文简单介绍 System Verilog 语言的 TestBench。 前文链接&#xff1a; 我的 System Verilog 学习记录&#xff08;1&#xff09; 我的 System Verilog 学习记录&#xff08;2&#xff09; testbench 的目的何在 &#xff1f; testbench 可以让我们通过仿真验证设计…

Qt 工程 pro文件

工作中&#xff0c;感觉pro文件的有些内容真不太懂&#xff0c;现系统性的学习一下。于此备录&#xff0c;分享共勉。 为了更好的理解&#xff0c;先创建一个简单的工程作为实践。 【1】创建一个pro文件 1.1 新建proDemo工程。步骤如下&#xff1a;Qt Creator--->New Pro…

数据结构初阶——时间复杂度与空间复杂度

时间复杂度与空间复杂度1. 算法效率1.1 如何衡量一个算法的好坏1.2算法的复杂度2.时间复杂度2.1 时间复杂度的概念2.2 大O的渐进表示法2.3常见时间复杂度计算举例实列1&#xff1a;实列2&#xff1a;实列3&#xff1a;实列4&#xff1a;实列5&#xff1a;实列6&#xff1a;实列…

k8s service的底层实现

承接上文同一个node中pod之间如何通信&#xff1f;当前的集群中给2个apache pod注册了一个service&#xff0c;这个地址是10.152.183.151&#xff0c;在ubuntu的pod中测试这个ip是可以通信的&#xff0c;it work来源于本机的pod&#xff0c;多访问几次发现会随机的把请求定向到…

远程控制详细教程,同时支持手机控制

​“我需要一些帮助&#xff0c;目前我因为休假旅游去了&#xff0c;需要临时远程办公。我工作的电脑运行的是Windows 10系统&#xff0c;我如何操作才能远程控制公司的电脑进行远程办公&#xff1f;我之前没用过远程控制相关的工具&#xff0c;什么简单的方法可以远程控制另一…

别只会搜日志了,求你懂点检索原理吧

别只会搜日志了&#xff0c;求你懂点检索原理吧 本篇主要内容如下&#xff1a; 前言 项目中我们总是用 Kibana 界面来搜索测试或生产环境下的日志&#xff0c;来看下有没有异常信息。Kibana 就是 我们常说的 ELK 中的 K。 Kibana 界面如下图所示&#xff1a; 但这些日志检索…

内网渗透(五十一)之域控安全和跨域攻击-跨域攻击介绍

系列文章第一章节之基础知识篇 内网渗透(一)之基础知识-内网渗透介绍和概述 内网渗透(二)之基础知识-工作组介绍 内网渗透(三)之基础知识-域环境的介绍和优点 内网渗透(四)之基础知识-搭建域环境 内网渗透(五)之基础知识-Active Directory活动目录介绍和使用 内网渗透(六)之基…

软件测试面试题 —— 整理与解析(1)

&#x1f60f;作者简介&#xff1a;博主是一位测试管理者&#xff0c;同时也是一名对外企业兼职讲师。 &#x1f4e1;主页地址&#xff1a;&#x1f30e;【Austin_zhai】&#x1f30f; &#x1f646;目的与景愿&#xff1a;旨在于能帮助更多的测试行业人员提升软硬技能&#xf…