Java 基础入门篇(三)——— 数组的定义与内存原理

news2024/11/26 4:29:45

文章目录

  • 一、数组的定义
    • 1.1 静态初始化数组
    • 1.2 动态初始化数组
    • 1.3 数组的访问
  • 二、数组的遍历
  • 三、数组的内存图
    • 3.1 Java 的内存分配
    • 3.2 数组的内存图
    • 3.3 两个数组变量指向同一个数组对象
  • 四、数组使用的常见问题
  • 补充:随机数 Random 类


一、数组的定义

数组就是一个容器,用于在程序中存储一批同种类型的数据。

1.1 静态初始化数组

使用场景:一旦确定了数据的具体值,我们就用这种方式存储批量数据。
在这里插入图片描述


1.2 动态初始化数组

使用场景:适合做一开始不能确定具体数据的情况。先定义数组,后赋值数据进去。

在这里插入图片描述

动态初始化数组的元素存在默认值:

在这里插入图片描述
注:数据类型[] 数组名称 可以写成 数据类型 数组名称[]


1.3 数组的访问

  • 格式:数组名称[索引]
  • 取值:int data = arr[1];
  • 赋值:arr[1] = 222;
  • 长度:arr.length

举例:

// 静态初始化
int[] count1 = new int[]{ 1, 2 ,3};
int[] count2 = { 4, 5, 6};
String[] names1 = new String[]{"张三", "李四"};
String[] names2 = {"张三", "李四"};

// 数组变量名存储的时数组在内存中的地址,数组是引用类型
System.out.println(names1); // [Ljava.lang.String;@4eec7777

// 动态初始化
int[] arr = new int[10];
System.out.println(arr[1]); // 默认值 0
System.out.println(arr); // [I@3b07d329

注:由于 String 是引用类型,数组中的每个位置存储的都是地址。


二、数组的遍历

逐一的访问数据,如:

int[] ages = {10, 30, 40, 50};
for (int i = 0; i < ages.length; i++) {
    System.out.println(ages[i]);
}

三、数组的内存图

3.1 Java 的内存分配

Java 内存主要被划分为:方法区、栈内存、堆内存、本地方法栈、寄存器。其中,方法区、栈内存、堆内存最为主要。

方法区: 放 Class 文件的。
栈内存: 运行的方法,main 方法,定义的变量。
堆内存: new 出来的对象,都在堆内存中。

在这里插入图片描述


3.2 数组的内存图

数组是引用类型,数组变量名中存储的是数组在内存中的地址。
在这里插入图片描述
数组变量是在栈内存,存储的地址是指向堆内存的一片区域,如:

在这里插入图片描述


3.3 两个数组变量指向同一个数组对象

在这里插入图片描述


四、数组使用的常见问题

  1. 不要访问超过数组最大索引,否则出现数组访问越界异常 ArrayIndexOutOfBoundsException。
  2. 空指针异常问题:
    int[] arr = null;
    System.out.println(arr); // null
    System.out.println(arr.length); // 空指针异常 NullPointerException
    
    在这里插入图片描述

补充:随机数 Random 类

  • 作用: 产生一个随机数
  • 步骤:
    1、导包(自动做的:) import java.util.Random;
    2、创建随机数对象:Random r = new Random();
    3、开始得到随机数 : int data = r.nextInt(10); // 0 - 9
  • 生产指定区间的随机数:
    1. 减加法
      1 - 10 ==> (0 - 9) + 1
      int data = r.nextInt(10) + 1;
    2. 生成指定区间的随机数:
      r.nextInt(10 , 31);

文章参考:Java入门基础视频教程,java零基础自学就选黑马程序员Java入门教程(含Java项目和Java真题)

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

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

相关文章

线程池~~

文章目录 线程池线程池实现API、参数说明线程池处理Runnable任务线程池处理Callable任务Executors工具类实现线程池定时器Timer定时器ScheduledExecutorService定时器 并发和并行线程的生命周期 线程池 线程池实现API、参数说明 线程池处理Runnable任务 线程池处理Callable任务…

Win11的两个实用技巧系列之修改c盘大小方法、功能快捷键大全

Win11 c盘无法更改大小什么原因?Win11修改c盘大小方法 有不少朋友反应Win11 c盘无法更改大小是怎么回事&#xff1f;本文就为大家带来了详细的更改方法&#xff0c;需要的朋友一起看看吧 Win11 c卷无法更改大小什么原因&#xff1f;有用户电脑的系统盘空间太小了&#xff0c;…

CTF权威指南 笔记 -第二章二进制文件-汇编原理

C语言的生命是从 源文件开始 的 每条C语言都必须要给翻译成 一系列的低级语言 最后 按照可执行文件格式打包 并且作为二进制文件保存起来 编译原理 我们需要使用编译器 是通过某种语言 等价输出另一个语言 可以分为前端和后端 前端 和机器无关 把源程序分解为组成要素 …

【Android入门到项目实战-- 7.4】—— 如何播放音频和视频

目录 一、播放音频 MediaPlayer的工作流程 具体代码实现 二、播放视频 具体代码实现 学完本篇文章可以收获如何播放音频和视频。 一、播放音频 播放音频需要使用MediaPlayer类实现&#xff0c;它对各种格式的音频文件提供了全面的控制方法&#xff0c;下面是MediaPlayer类…

Android 9.0 原生SystemUI下拉通知栏UI背景设置为圆角背景的定制(二)

1.前言 在9.0的系统rom定制化开发中,在原生系统SystemUI下拉状态栏的通知栏的背景是默认白色四角的背景,由于在产品设计中,需要把四角背景默认改成圆角背景,所以就需要分析系统原生下拉通知栏的每条通知的默认背景,然后通过熟悉systemui的通知栏流程,设置默认下拉状态栏…

ChatGPT探索系列之三:探究ChatGPT的训练、优化和应用方法

文章目录 前言一、ChatGPT训练原理二、采样和微调阶段三、采样和训练奖励模型阶段三、采样和训练奖励模型阶段总结 前言 ChatGPT发展到目前&#xff0c;其实网上已经有大量资料了&#xff0c;博主做个收口&#xff0c;会出一个ChatGPT探索系列的文章&#xff0c;帮助大家深入了…

数据库如何合理生成主键:UUID、雪花算法

目录 1.使用自增主键的弊端 2.主键生成算法 2.1.UUID 2.1.1.概述 2.1.2.JAVA中的UUID 2.2.雪花算法 2.2.1.概述 2.2.2.JAVA中使用雪花算法 1.使用自增主键的弊端 首先在实际工程中我们很少用1&#xff0c;2&#xff0c;3......这样的自增主键&#xff0c;原因如下&…

MRI 成像方法和脉冲序列整理

以下内容为MRI期末复习笔记&#xff0c;仅供复习参考使用。 成像方法 2D重建 反投影重建 傅里叶重建 运用中心截面定理&#xff0c;一个三维物体的二维投影的傅里叶变换精确地等于物体的傅里叶变换的中心截面 上述定理换成二维同理 重建步骤 1、取得投影 P ( r , ϕ ) P(r,…

一招解决ChatGPT对话经常中断问题:KeepChatGPT插件

大家好&#xff0c;我是可夫小子&#xff0c;关注AIGC、读书和自媒体。解锁更多ChatGPT、AI绘画玩法。加&#xff1a;keeepdance&#xff0c;备注&#xff1a;chatgpt&#xff0c;拉你进群。 在访问ChatGPT官网进行聊天时&#xff0c;经常遇到了『与服务器断开』Something wet …

C++语法(22)---- 哈希表的闭散列和开散列

C语法&#xff08;21&#xff09;---- 模拟map和set_哈里沃克的博客-CSDN博客https://blog.csdn.net/m0_63488627/article/details/130354019?spm1001.2014.3001.5501 目录 1.哈希表的介绍 1.stl中的哈希表使用 2.比较 3.哈希的原理 4.哈希映射的方法 1.直接定址法 2.…

FreeRTOS 软件定时器

文章目录 一、软件定时器简介二、定时器服务/Daemon 任务三、单次定时器和周期定时器四、复位软件定时器1. 函数 xTimerReset()2. 函数 xTimerResetFromISR() 五、创建软件定时器1. 函数 xTiemrCreate()2. 函数 xTimerCreateStatic() 六、开启软件定时器1. 函数 xTimerStart()2…

条件构造器Wrapper

本文来说下mybatis-plus中的条件构造器Wrapper 文章目录 条件构造器程序实例 条件构造器 十分重要&#xff1a;Wrapper 我们写一些复杂的sql就可以使用它来替代&#xff01; 程序实例 测试一 Overridepublic List<OrderInfo> getOrderInfo() {// id等于2的数据QueryWrapp…

K210单片机的按键检测

这个图片是程序的效果&#xff0c;按下按键后蓝灯亮起&#xff0c;松开按键后蓝灯熄灭。 主要用的的就是函数的构造方法和使用方法&#xff1a; GPIO(ID,MODE,PULL,VALUE) GPIO 对象。 【ID】内部 GPIO 编号; 【MODE】GPIO 模式&#xff1b; GPIO.IN &#x…

保龄球游戏的获胜者、找出叠涂元素----2023/4/30

保龄球游戏的获胜者----2023/4/30 给你两个下标从 0 开始的整数数组 player1 和 player2 &#xff0c;分别表示玩家 1 和玩家 2 击中的瓶数。 保龄球比赛由 n 轮组成&#xff0c;每轮的瓶数恰好为 10 。 假设玩家在第 i 轮中击中 xi 个瓶子。玩家第 i 轮的价值为&#xff1a; …

SpringMVC学习总结(三)SpringMVC获取请求参数的几种方法解决获取请求参数的乱码问题CharacterEncodingFilter过滤器

SpringMVC学习总结&#xff08;三&#xff09;SpringMVC获取请求参数的几种方法/解决获取请求参数的乱码问题/CharacterEncodingFilter过滤器 一、通过ServletAPI获取请求参数 将HttpServletRequest作为控制器方法的形参&#xff0c;此时HttpServletRequest类型的参数表示封装…

Elasticsearch --- 数据聚合、自动补全

一、数据聚合 聚合&#xff08;aggregations&#xff09;可以让我们极其方便的实现对数据的统计、分析、运算。例如&#xff1a; 什么品牌的手机最受欢迎&#xff1f; 这些手机的平均价格、最高价格、最低价格&#xff1f; 这些手机每月的销售情况如何&#xff1f; 实现这…

山东专升本计算机第十章-计算思维

计算思维 分支主题 3 10.2计算思维与算法 考点 3 算法概论 算法就是对计算思维解决问题的方法的描述是计算机求解的核心和关键。 基本特征 • 有穷性 • 算法必须能执行有线各步骤之后停止 • 确定性 • 算法的每一个步骤都必须有明确的定义不应该在理解时产生二义性 • 可…

【软考数据库】第六章 数据库技术基础

目录 6.1 基本概念 6.1.1 关于数据的基本概念 6.1.2 数据库管理系统的功能 6.1.3 数据各个发展阶段的特点 6.1.4 数据库系统的体系结构 6.2 数据模型 6.2.1 三级模式两级映像 6.2.2 数据模型_模型分类 6.2.3 数据模型_组成…

Linux man 命令详解

man 命令 Linux man 命令用于显示 Linux 操作系统中的手册页&#xff08;manual page&#xff09;&#xff0c;它提供了对 Linux 操作系统中各种命令、函数、库等的详细说明&#xff0c;man 命令有许多参数。 参数介绍 下面简要介绍一下主要参数的功能&#xff1a; -f&…

Java面试题总结 | Java面试题总结7- Redis模块(持续更新)

Redis 文章目录 Redisredis的线程模型Redis的Mysql的区别Redis和传统的关系型数据库有什么不同&#xff1f;Redis常见的数据结构zset数据结构Redis中rehash过程redis为什么不考虑线程安全的问题呢Redis单线程为什么还能这么快&#xff1f;为什么Redis是单线程的&#xff1f;red…