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-4
            int 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课程

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式学习之Linux入门篇笔记——17,makefile基本语法(上)

配套视频学习链接&#xff1a;http://【【北京迅为】嵌入式学习之Linux入门篇】 https://www.bilibili.com/video/BV1M7411m7wT/?p4&share_sourcecopy_web&vd_sourcea0ef2c4953d33a9260910aaea45eaec8 目录 一&#xff0e;设置 vim 首行缩进 二.Makefile 基本语法…

【JS逆向三】逆向某某网站的sign参数,并模拟生成仅供学习

逆向日期&#xff1a;2024.02.06 使用工具&#xff1a;Node.js 类型&#xff1a;webpack 文章全程已做去敏处理&#xff01;&#xff01;&#xff01; 【需要做的可联系我】 可使用AES进行解密处理&#xff08;直接解密即可&#xff09;&#xff1a;AES加解密工具 1、打开某某…

Ansible copy模块 复制文件使用 主服务器 给副服务器 复制文件使用 指定文件权限 覆盖备份等

目录 参数复制文件然后进行同时复制操作 给定内容生成文件&#xff0c;并制定权限验证 关于覆盖先查看当前内容覆盖并备份查看文件权限 还有有没有备份查看文件内容 参数 这个模块用于将文件复制到远程主机&#xff0c;同时支持给定内容生成文件和修改权限等。   其相关选项…

深入理解java之多线程(一)

前言&#xff1a; 本章节我们将开始学习多线程&#xff0c;多线程是一个很重要的知识点&#xff0c;他在我们实际开发中应用广泛并且基础&#xff0c;可以说掌握多线程编写程序是每一个程序员都应当必备的技能&#xff0c;很多小伙伴也会吐槽多线程比较难&#xff0c;但因为其实…

gem5学习(17):ARM功耗建模——ARM Power Modelling

目录 一、Dynamic Power States 二、Power Usage Types 三、MathExprPowerModels 四、Extending an existing simulation 五、Stat dump frequency 六、Common Problems 官网教程&#xff1a;gem5: ARM Power Modelling 通过使用gem5中已记录的各种统计数据&#xff0c;…

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 2月10日,星期六

每天一分钟&#xff0c;知晓天下事&#xff01; 2024年2月10日 星期六 农历正月初一 春节 1、 国务院&#xff1a;到2025年&#xff0c;初步建成覆盖各领域、各环节的废弃物循环利用体系。 2、 国家移民管理局&#xff1a;部分国家人员可以用更多事由免签入境海南。 3、 市场…

使用AI开发一个红包封面生成器

使用 VUE3&#xff0c;和 Express 开发一个红包封面。 生成效果如下 体验地址&#xff1a;https://hongbao.digitalmodel.top/

政安晨:示例演绎TensorFlow的官方指南(三){快速使用数据可视化工具TensorBoard}

这篇文章里咱们演绎TensorFLow的数据可视化工具&#xff1a;TensorBoard。 在机器学习中&#xff0c;要改进模型的某些参数&#xff0c;您通常需要对其进行衡量。TensorBoard 是用于提供机器学习工作流期间所需测量和呈现的工具。它使您能够跟踪实验指标&#xff08;例如损失和…

Blender教程(基础)--试图的显示模式-22

一、透视模式&#xff08;AltZ&#xff09; 透视模式下可以实现选中透视的物体信息 发现选中了透视区的所有顶点 二、试图着色模式-显示网格边框 三、试图着色模式-显示实体 三、试图着色模式-材质预览 四、试图着色模式-显示渲染预览

RNA二级结构基础知识+一些绘制程序及用法

整理笔记翻出来的&#xff0c;以下所有程序的测试时间都是2019年11月&#xff0c;不保证现在是否能用。基本都来自论文。 此外&#xff0c;这些程序都属于能用&#xff0c;但是对长序列&#xff08;>3000&#xff09;或者复杂序列不够友好的。 &#xff08;后来我自己写了…

Qt PCL学习(三):点云滤波

注意事项 版本一览&#xff1a;Qt 5.15.2 PCL 1.12.1 VTK 9.1.0前置内容&#xff1a;Qt PCL学习&#xff08;一&#xff09;&#xff1a;环境搭建、Qt PCL学习&#xff08;二&#xff09;&#xff1a;点云读取与保存 0. 效果演示 1. pcl_open_save.pro QT core guigr…

Project 2010下载安装教程,保姆级教程,附安装包和工具

前言 Project是一款项目管理软件&#xff0c;不仅可以快速、准确地创建项目计划&#xff0c;而且可以帮助项目经理实现项目进度、成本的控制、分析和预测&#xff0c;使项目工期大大缩短&#xff0c;资源得到有效利用&#xff0c;提高经济效益。软件设计目的在于协助专案经理发…

除夕快乐(前端小烟花)

家人们&#xff0c;新的一年好运常在&#xff0c;愿大家在新的一年里得偿所愿&#xff0c;发财暴富&#xff0c;愿大家找到属于自己的那个公主&#xff0c;下面就给大家展示一下给公主的烟花 前端烟花 新的一年&#xff0c;新的挑战&#xff0c;愿我们不忘初心&#xff0c;砥砺…

谷歌发布AI新品Gemini及收费模式;宜家推出基于GPT的AI家装助手

&#x1f989; AI新闻 &#x1f680; 谷歌发布AI新品Gemini及收费模式 摘要&#xff1a;谷歌宣布将原有的AI产品Bard更名为Gemini&#xff0c;开启了谷歌的AI新篇章。同时推出了强化版的聊天机器人Gemini Advanced&#xff0c;支持更复杂的任务处理&#xff0c;提供了两个月的…

人力资源智能化管理项目(day04:组织架构)

学习源码可以看我的个人前端学习笔记 (github.com):qdxzw/humanResourceIntelligentManagementProject 觉得有帮助的同学&#xff0c;可以点心心支持一下哈 树组件应用 <!-- 展示树形结构 --><!-- default-expand-all默认展开所有节点 --><el-tree default-ex…

医学护理答案怎么查找? #笔记#学习方法#微信

今天分享拥有拍照搜题、文字搜题、语音搜题、多重搜题等搜题模式&#xff0c;可以快速查找问题解析&#xff0c;加深对题目答案的理解。 1.滴墨书摘 这款软件相当于一个在线“摘抄本”&#xff0c;我们可以利用它来记录一些阅读时遇到的好句子或者是段落&#xff0c;或许下次…

Linux操作系统基础(五):Linux的目录结构

文章目录 Linux的目录结构 一、Linux目录与Windows目录区别 二、常见目录介绍&#xff08;记住重点&#xff09; Linux的目录结构 一、Linux目录与Windows目录区别 Linux的目录结构是一个树型结构 Windows 系统 可以拥有多个盘符, 如 C盘、D盘、E盘 Linux 没有盘符 这个概…

【DDD】学习笔记-领域模型与函数范式

函数范式 REA 的 Ken Scambler 认为函数范式的主要特征为&#xff1a;模块化&#xff08;Modularity&#xff09;、抽象化&#xff08;Abstraction&#xff09;和可组合&#xff08;Composability&#xff09;&#xff0c;这三个特征可以帮助我们编写简单的程序。 通常&#…

JavaScript综合练习4

JavaScript 综合练习 4 1. 案例演示 2. 代码实现 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title&…

ES实战-book笔记1

#索引一个文档,-XPUT手动创建索引, curl -XPUT localhost:9200/get-together/_doc/1?pretty -H Content-Type: application/json -d {"name": "Elasticsearch Denver","organizer": "Lee" } #返回结果 {"_index" : "g…