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

news/2024/10/30 11:31:28/

文章目录

  • 一、数组的定义
    • 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.ppmy.cn/news/58709.html

相关文章

兴寿镇“春踏青,兴寿行”特色旅游线路点靓辛庄

记者&#xff1a;云飞 踏着欢乐的节拍&#xff0c;伴着春日的暖阳&#xff0c;2023年4月29日&#xff0c;北京市昌平区兴寿镇&#xff0c;2023党建引领文旅农产业融合发展系列旅游季——“春踏青&#xff0c;兴寿行”特色旅游线路第二站&#xff0c;在兴寿镇辛庄村圆满举办。 此…

如何选择正确的数据可视化图表

数据可视化是数据分析的重要组成部分&#xff0c;因为它们能够以图形格式有效地汇总大量数据。有许多可用的图表类型&#xff0c;每种类型都有自己的优势和用例。分析过程中最棘手的部分之一是选择使用这些可视化效果之一的正确方法来表示数据。 在本文中&#xff0c;我们根据需…

Maven(六):Maven的使用——继承与聚合

Maven&#xff08;六&#xff09;&#xff1a;Maven的使用——继承与聚合 前言一、实验九&#xff1a;继承1、概念2、作用3、举例4、操作4.1 创建父工程4.2 创建模块工程4.3 查看被添加新内容的父工程 pom.xml4.4 解读子工程的pom.xml4.5 在父工程中配置依赖的统一管理4.6 子工…

Shell+VCS学习3---VCS命令

1 VCS介绍 VCS的功能可以大致分为两个大类&#xff1a;编译和仿真。 VCS编译的过程&#xff0c;就是经过一系列的操作&#xff0c;将verilog代码转换为可执行文件&#xff08;.svim&#xff09;&#xff0c;接下来就是用dve进行仿真过程生成.vpd波形文件。 VCS是编译型verilo…

Kafka架构原理(三)

三、Kafka架构原理 3.1 整体架构图 一个典型的kafka集群中包含若干个Producer&#xff0c;若干个Broker&#xff0c;若干个Consumer&#xff0c;以及一个zookeeper集群&#xff1b; kafka通过zookeeper管理集群配置&#xff0c;选举leader&#xff0c;以及在Consumer Group发…

SpringBoot -05 SpringBoot web相关配置(静态资源访问、统一异常处理、文件上传、拦截器、统一跨域请求处理)

小总结 SpringBoot是一个基于Spring的工具集&#xff0c;去帮我们完成了大量的配置。在SpringBoot中有一个约定大于配置的概念&#xff0c;就是他把我们很多第三方框架帮我们写好了&#xff0c;而且把我们整个第三方框架所需要的依赖全都通过起步依赖加进去了。开发中只需要加入…

两分钟成为 ChatGPT 国内高手【不要再拿ChatGPT当百度用了】

不要再问ChatGPT那些问百度的问题了&#xff0c;有更进阶的用法 更高效的编写prompts&#xff0c;以便ChatGPT给出更精准的回答 但是需要注意的是&#xff1a;国内现在根本没有GPT-4使用&#xff0c;但凡是说有GPT-4的都是骗子。 GPT 可以写文章&#xff0c;可以写诗&#x…

JSP+SQL基于JSP的学生信息管理系统(源代码+论文+答辩PPT)

随着学校规模的不断扩大&#xff0c;学生数量急剧增加&#xff0c;有关学生的各种信息也成倍增长。面对如此庞大的信息量&#xff0c;开发学生信息管理系统来提高学生管理工作的效率就成为必然。通过该系统&#xff0c;可以做到信息的规范管理、科学统计和快速查询&#xff0c;…