JavaSE——数组(2/2)-数组在计算机中的执行原理、数组案例、Debug工具的使用

目录

数组在计算机中的执行原理

Java内存分配介绍

数组的执行原理

多变量指向同一数组

数组案例

求最大值

数组反转

随机排名

Debug工具的使用


数组在计算机中的执行原理

Java内存分配介绍

程序都是在内存中执行的,Java程序编译之后会产生一个class文件,然后将这个class文件提取到内存中正在运行的虚拟机里面去执行的。

Java为了便于虚拟机执行这个Java程序,它将虚拟机中的内存区域进行了划分:

  • 方法区
  • 本地方法栈
  • 程序计数器

目前重要的是关注前三块。

其中,方法区是放置我们编译之后的class文件的,也就是字节码文件。

是方法运行时所进入的内存, 由于变量是在方法里的,所以变量也是在这块内存中。

也就是说,一个类中的main方法要执行的时候,它是把main方法提到栈里面来进行执行的。

里面放的都是new出来的东西,它会在堆内存中开辟空间并产生地址。

例如数组就是放在堆内存中的。大致了解前三块区域,以后会逐个进行祥解,接下来我们了解一下数组的执行原理。

数组的执行原理

int a = 20;
int[] arr = new int[3];
  • a是变量,直接放在栈中,a变量中存储的数据就是20这个值。
  • new int[3] 是创建一个数组对象,会在堆内存中开辟区域存储3个整数。
  • arr是变量,在栈中,arr中存储的是数组对象在堆内存中的地址值。

多变量指向同一数组

当多个数组变量指向同一个数组对象时,它们存储的数组对象的地址都是一样的;因而导致多个变量修改的都是同一个数组对象中的数据。

如果某个数组变量中存储的是null值,代表这个数组变量没有指向数组对象,不能用这个数组变量去访问数据或者访问数组长度。


1、多个数组变量,指向同一个数组对象的原因是什么?需要注意什么?

  • 多个数组变量中存储的是同一个数组对象的地址。多个变量修改的都是同一个数组对象中的数据。

2、如果某个数组变量中存储的null,代表什么意思?需要注意什么?·

  • 代表这个数组变量没有指向数组对象。
  • 可以输出这个变量,但是不能用这个数组变量去访问数据或者访问数组长度,会报空指针异常:NullPointerException。

数组案例

求最大值

颜值
15900010000
200009500-5

找出最高颜值。

实现步骤: 

  1. 把颜值数据拿到程序中去,用数组装起来。
  2. 定义一个变量用于记录最大值。(最大值初始值设为数组的第一个数据)
  3. 从第二个位置开始:遍历数组的数据,如果遍历的当前数据大于max变量存储的数据,则替换变量存储的数据为当前数据。
  4. 循环结束后输出max变量即可。
public class MaxMizing
{public static void main(String[] args){//接入颜值数据int[] faceScores = {15,9000,10000,20000,9500,-5};//定义记录颜值最大值的变量,初始化为数组的第一个数据int Max = faceScores[0];//遍历数据找出最大值for(int i = 1; i < faceScores.length; i++){if(faceScores[i] > Max){Max = faceScores[i];}}System.out.println("最高颜值是:" + Max);}
}

数组反转

需求

某个数组有5个数据:10,20,30,40,50,请将这个数组中的数据进行反转。

反转前: [ 10,20,30,40,50 ]

反转后: [ 50,40,30,20,10 ]

数组的反转操作,实际上就是依次前后交换数据即可实现。

public class ReverseArray
{public static void main(String[] args){//准备需求中的数组int[] arr = {10,20,30,40,50};//循环依次交换数组第一个和最后一个的数据int i,j;for(i = 0,j = arr.length - 1; i < j;i++,j--){//交换数据(可以有多种方法)arr[i] = arr[i] ^ arr[j];arr[j] = arr[i] ^ arr[j];arr[i] = arr[i] ^ arr[j];}//输出反转之后的数组for(int a = 0; a < arr.length; a++){System.out.print(arr[a] + " ");}}
}

随机排名

需求

某公司开发部5名开发人员,要进行项目进展汇报演讲,现在采取随机排名后进行汇报。请先依录入5名员工的工号,然后展示出一组随机的排名顺序。

  1. 在程序中录入5名员工的工号存储起来--->使用动态初始化数组的方式。
  2. 依次遍历数组中的每个数据。
  3. 每遍历到一个数据,都随机一个索引值出来,让当前数据与该索引位置处的数据进行交换。
import java.util.Random;
import java.util.Scanner;public class RandomRanking
{public static void main(String[] args){//先定义一个动态初始化的数组int[] codes = new int[5];//提示用户录入5名员工的工号Scanner sc = new Scanner(System.in);int i;for(i = 0; i < codes.length;i++){System.out.println("请您输入当前第" + (i + 1) + "个员工的工号:");int code = sc.nextInt();codes[i] = code;}//将数组打乱Random r = new Random();for(i = 0; i < codes.length;i++){int index = r.nextInt(codes.length); // 0-4int temp = codes[index];codes[index] = codes[i];codes[i] = temp;}//输出打乱后的员工工号for (i = 0; i < codes.length;i++){System.out.print(codes[i] + " ");}}
}

Debug工具的使用

  • IDEA自带的断点调试工具,可以控制代码从断点开始一行一行的执行,然后详细观看程序执行的情况。

基本使用步骤

  1. 在需要控制的代码行左侧,点击一下,形成断点
  2. 选择使用Debug方式启动程序,启动后程序会在断点暂停
  3. 控制代码一行一行的往下执行


END


学习自:黑马程序员——JavaSE课程

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ps:直接从图层生成文件(图像资源)

通过Ps菜单&#xff1a;文件/导出/将图层导出到文件 Layers to Files命令&#xff0c;我们可以快速地将当前文档中的每个图层导出为同一类型、相同大小和选项的独立文件。 Photoshop 还提供了一个功能&#xff0c;可以基于文档中的图层或图层组的名称&#xff0c;自动生成指定大…

无心剑中译佚名《春回大地》

The Coming of Spring 春回大地 I am coming, little maiden, With the pleasant sunshine laden, With the honey for the bee, With the blossom for the tree. 我来啦&#xff0c;小姑娘 满载着欣悦的阳光 蜂儿有蜜酿 树儿有花绽放 Every little stream is bright, All …

【深度学习】:滴滴出行-交通场景目标检测

清华大学驭风计划课程链接 学堂在线 - 精品在线课程学习平台 (xuetangx.com) 代码和报告均为本人自己实现&#xff08;实验满分&#xff09;&#xff0c;只展示主要任务实验结果&#xff0c;如果需要详细的实验报告或者代码可以私聊博主&#xff0c;接实验技术指导1对1 有任…

【机器学习笔记】决策树

决策树 文章目录 决策树1 决策树学习基础2 经典决策树算法3 过拟合问题 1 决策树学习基础 适用决策树学习的经典目标问题 带有非数值特征的分类问题离散特征没有相似度概念特征无序 例子&#xff1a; SkyTempHumidWindWaterForecastEnjoySunnyWarmNormalStrongWarmSameYesSunny…

免费软件推荐-开源免费批量离线图文识别(OCR)

近期要批量处理图片转电子化&#xff0c;为了解决这个世纪难题&#xff0c;试了很多软件&#xff08;华为手机自带OCR识别、 PandaOCR、天若OCR、Free OCR&#xff09;等软件&#xff0c;还是选择了这一款&#xff0c;方便简单 一、什么是OCR? 光学字符识别&#xff08;Opt…

YOLOv8改进 | 检测头篇 | 独创RFAHead检测头超分辨率重构检测头(适用Pose、分割、目标检测)

一、本文介绍 本文给大家带来的改进机制是RFAHead,该检测头为我独家全网首发,本文主要利用将空间注意力机制与卷积操作相结合的卷积RFAConv来优化检测头,其核心在于优化卷积核的工作方式,特别是在处理感受野内的空间特征时。RFAConv主要的优点就是增加模型的特征提取能力,…

解析ajax原理是什么(如何实现)

文章目录 一、是什么二、实现过程创建XMLHttpRequest对象与服务器建立连接给服务端发送数据绑定onreadystatechange事件 三、封装 一、是什么 AJAX全称(Async Javascript and XML) 即异步的JavaScript 和XML&#xff0c;是一种创建交互式网页应用的网页开发技术&#xff0c;可…

postman 文档、导出json脚本 导出响应数据 response ,showdoc导入postman json脚本 导出为文档word或markdown

保存、补全尽可能多的数据、描述 保存响应数据 Response&#xff1a;&#xff08;如果导出接口数据&#xff0c;会同步导出响应数据&#xff09; 请求接口后&#xff0c;点击下方 Save as Example 可以保存响应数据到本地&#xff08;会在左侧接口下新增一个e.g. 文件用来保…

018 Linux

文章目录 操作系统定义分类Linux系统构成 Linux文件系统Linux常用命令基础操作命令文件操作压缩解压权限管理显示展示命令其他命令 vi编译器操作使用 添加用户基本概念用户管理命令 ubuntu软件安装ssh服务终端启动Python服务 操作系统 定义 操作系统是管理计算机硬件与软件资…

[收藏] 数据结构知识全览

以下是数据结构技术主要知识的总结&#xff1a; 1. 基本数据结构 - 数组&#xff1a;固定大小的连续内存空间存储元素&#xff0c;支持随机访问。 - 链表&#xff1a;由节点组成的线性结构&#xff0c;每个节点包含数据和指向下一个节点的指针。 - 栈&#xff1a;后进先出&…

ClickHouse--01--简介

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1. ClickHouse 简介1.1 大数据处理场景1.2 什么是 ClickHouse1.3 OLAP 场景的特征 2. ClickHouse 特性2.1 完备的 DBMS 功能2.2 列式存储行式存储: 在数据写入和修改…

外包干了6个月,技术退步明显了...

先说一下自己的情况&#xff0c;大专生&#xff0c;19年通过校招进入湖南某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年8月份&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…