Java学习路线(5)——数组

news2024/11/17 9:48:29

一、数组的概念
数组是用来存储一系列同类型数据的内存区域。


二、存储数据
1、静态初始化数组
作用: 定义数组时直接赋值。
格式: 【数据类型[] 变量名 = new 数据类型[]{值1,值2…,值n}】
示例:
double[] height = {172.5,170.1,145.1,152.5,167.8};
double[] weight = new double[]{84,72,55,63,71};
基本原理:
height 作为数组变量,存储的是数组第一个元素的内存地址,通过该内存地址可以直接输出第一个元素,而数组是连续的内存区域,所以可以直接通过地址计算进行获取。
在这里插入图片描述

  • 数组访问
    数组访问有两个值:索引访问,长度访问。

  • 索引访问
    格式: 【数组名[索引]】
    注意: 索引是从0开始计算

  • 长度访问
    格式: 【数组名.length】

  • 注意事项
    1、数组的两种写法:数组类型[] 数组名 <=> 数组类型 数组名[]
    2、数组存放的数据类型必须相同。
    3、数组一旦定义,程序执行过程中长度和类型不能更变。

2、动态初始化数组
作用: 定义数组的时候只确定元素类型和长度,再赋值数据。
格式: 【数据类型[] 数组名 = new 数据类型[数组长度]】
默认值:

数据类型默认值
整型0
浮点型0.0
布尔型false
引用型null

三、数组遍历
概念: 将数组中的数据一个个获取。
遍历方式:

  • 顺序索引遍历
		double[] height = {172.5,170.1,145.1,152.5,167.8};
        System.out.println(height[0]);
        System.out.println(height[1]);
        System.out.println(height[2]);
        System.out.println(height[3]);
        System.out.println(height[4]);
  • 循环索引遍历
		double[] height = {172.5,170.1,145.1,152.5,167.8};
        for (int i = 0; i < height.length; i++) {
            System.out.println(height[i]);
        }
  • 迭代器遍历
		double[] height = {172.5,170.1,145.1,152.5,167.8};
        for (double h :height) {
            System.out.println(h);
        }

四、解决实际问题
1、销售部门的销售总额求和。

		double[] money = {16,32,8,100,78};
        double total = 0;
        for (double m :money) {
            total += m;
        }
        System.out.println(total);  //234.0

2、求取身高最高的人。

        double[] height = {172.5,170.1,145.1,152.5,167.8};
        double max = height[0];
        for (double h :height) {
            max = Math.max(max, h);
        }
        System.out.println(max);    //172.5

3、冒泡排序
思想: 每次从数组找到最大值并将其排到最后。

		int[] arr = {1,5,3,2,8,6};
        for (int i = 0; i < arr.length-1; i++) {
            for (int j = 0; j < arr.length - 1 - i; j++) {
                if (arr[j] > arr[j+1]){
                    int temp = arr[j+1];
                    arr[j+1] = arr[j];
                    arr[j] = temp;
                }
            }
        }
        System.out.println(Arrays.toString(arr));   //[1, 2, 3, 5, 6, 8]

五、内存原理
1、Java内存分配


  • 栈内存是方法执行时或变量声明进入的内存区域。

  • 堆内存是对象存储的内存区域,开辟空间并产生地址。
  • 方法区
    字节码加载时进入的内存区域
  • 本地方法栈
  • 寄存器

2、数组内存图
从字节码文件载入开始,一步步执行文件代码,从程序入口函数main转至栈内存,查找对应main函数的地址,再执行下一步代码即创建数组。创建数组时,先在栈内存开辟一个变量空间,再向堆内存中开辟一块连续的空间,当存在数组空间后,再将连续空间的第一个元素地址写入堆内存的变量空间。
在这里插入图片描述


六、数组使用注意点
1、数组越界异常(ArrayIndexOutOfBoundsException)
若访问元素位置超过最大索引,则会引发越界异常。
2、空指针异常(NullPointerException)
若访问数组时,数组变量没有存储地址,则引发空指针异常。


补充知识
在系统开发中,我们会遇到各种各样的代码错误或是程序异常,那么我们就需要Debug工具去查找错误的地方,现有的程序编辑器中都带有debug工具,浏览器端也只需要在文件窗口打上断点标记,就可以查看前端逻辑错误。后端可以在编辑器上目标代码行打上断点标记,在程序执行时遇到标记则会停止执行。

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

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

相关文章

java常用工具之Scanner类

目录 简介一、扫描控制台输入1.1nextLine1.2nextInt1.3其他方法 二、扫描文件三、查找匹配项四、小结 简介 Java 的 Scanner 类是一个方便在控制台扫描用户输入的工具类&#xff0c;虽然它也可以扫描文件内容&#xff0c;但我们通常更喜欢它扮演前面的角色&#xff0c;因为扫描…

Flink第五章:处理函数

系列文章目录 Flink第一章:环境搭建 Flink第二章:基本操作. Flink第三章:基本操作(二) Flink第四章:水位线和窗口 Flink第五章:处理函数 文章目录 系列文章目录前言一、基本处理函数(ProcessFunction)二、按键分区处理函数&#xff08;KeyedProcessFunction&#xff09;1.处理…

【Linux进阶之路】基本权限的理解

文章目录 一.用户1.分类2.su3.su-4.sudo 二.文件1.文件分类2.文件权限3.文件权限的身份4.chmod——改写文件权限第一种方式第二种方式 5.chown——改写文件拥有者身份6.chgrp ——改写文件所属组身份7.umask ——设置权限掩码8.目录权限9.粘滞位——特殊的可执行权限 一.用户 …

关于Markdown文件的处理【笔记】

关于Markdown文件的处理【笔记】 前言推荐关于Markdown文件的处理一、md文件转word文档1 准备2 打开3 转为word文档4 导出结果5 打开 二、word文档转md文件1 准备2 导入3 打开4 显示图片5 打开 三、导入到CSDN中1 选择导入2 查看 四、导入设置1 前言2 导入设置3 修改配置 最后 …

ES6之生成器

文章目录 前言一、生成器是什么&#xff1f;二、生成器总结 前言 生成器 一、生成器是什么&#xff1f; 生成器就是一个特殊的函数&#xff0c;实现异步编程。格式function *名称(){...} (这个*靠近function写&#xff0c;靠近名称写&#xff0c;或者两边空格都不靠近均正确)…

[比赛简介]Parkinson‘s Freezing of Gait Prediction

比赛链接&#xff1a;https://www.kaggle.com/competitions/tlvmc-parkinsons-freezing-gait-prediction 比赛简介 本次比赛的目标是检测步态冻结&#xff08;FOG&#xff09;&#xff0c;这是一种使人衰弱的症状&#xff0c;困扰着许多帕金森病患者。您将开发一个机器学习…

YOLO V3 SPP ultralytics 第三节:关于yolo 中cfg的网络配置信息和读取cfg配置文件

目录 1. 介绍 2. 关于yolo的cfg网络配置文件 2.1 关于卷积层 2.2 关于池化层 2.3 关于捷径分支shortcut 2.4 关于route 层 2.5 关于上采样层 2.6 关于yolo层 3. 解析cfg 文件 4. 代码 1. 介绍 根据 第二节 的步骤&#xff0c;生成了属于自己的 my_yolov3.cfg 配置…

Python 墨西哥湾流(gulf stream)可视化

背景介绍 墨西哥湾流和黑潮分别是北半球两支强大的西边界流&#xff0c;墨西哥湾流的流速还要强于黑潮&#xff0c;也是温盐环流的重要组成部分。 引入涡度的概念&#xff0c;将涡度分为两个部分&#xff1a; 1、行星涡度&#xff0c;记为 f f f&#xff0c;与地球自转有关…

【软考数据库】第十四章 数据库主流应用技术

目录 14.1 分布式数据库 14.2 Web与数据库 14.3 XML与数据库 14.4 面向对象数据库 14.5 大数据与数据库 14.6 NewSQL 前言&#xff1a; 笔记来自《文老师软考数据库》教材精讲&#xff0c;精讲视频在b站&#xff0c;某宝都可以找到&#xff0c;个人感觉通俗易懂。 14.1 …

Springcloud1---->openFeign

目录 简介快速入门导入依赖开启Feign配置Feign客户端接口Feign使用小结feign feign配置负载均衡feign配置Hystix支持 简介 Feign可以把Rest的请求进行隐藏&#xff0c;伪装成类似SpringMVC的Controller一样。你不用再自己拼接url&#xff0c;拼接参数等等操作&#xff0c;一切…

WebSocket 详解,以及用QWebSocket 实现服务端和客户端(含代码例子)

目录 1、WebSocket 诞生背景 2、WebSocket的特点&#xff1a; 3、 WebSocket 简介 4、WebSocket 优点 5、QWebSocket通讯—客户端&#xff1a; 6、QWebSocket通讯—服务端&#xff1a; 1、WebSocket 诞生背景 早期&#xff0c;很多网站为了实现推送技术&#xff0c;所用的技术都…

初始Linux发展

目录 前言 Linux概念&#xff1a; 一.Linux发展历史 二.Linux的发展现状 三.发行版本 四.Linux 环境的搭建方式 主要有三种 : 4.6下载方式&#xff1a; 五.XShell软件 前言 Linux概念&#xff1a; Linux&#xff0c;全称GNU/Linux&#xff0c;是一套免费使用和自由传播的…

python中的对象和变量的关系

这里写目录标题 对象简介对象的结构变量和对象 对象简介 Python是一门面向对象的编程语言&#xff01; 一切皆对象&#xff01; 程序运行当中&#xff0c;所有的数据都是存储到内存当中然后再运行的&#xff01; 对象就是内存中专门用来存储指定数据的一块区域 对象实际上就是…

《计算机网络—自顶向下方法》 Wireshark实验(九):DHCP 协议分析

DHCP&#xff08;Dynamic Host configuration protocol&#xff09;动态主机配置协议&#xff0c;它可以为客户机自动分配 IP 地址、子网掩码以及缺省网关、DNS 服务器的 IP 地址等 TCP/IP 参数&#xff0c; 简单来说&#xff0c;就是在 DHCP 服务器上有一个数据库&#xff0c;…

Go开发PaaS平台核心功能

Go开发PaaS平台核心功能 1 云原生PaaS平台介绍 随着云计算的发展&#xff0c;越来越多的企业逐步的把IT资源迁移到云上。PaaS平台作为基础设施基座&#xff0c;可以帮助企业快速构建功能丰富的容器云平台&#xff0c;提升交付效率&#xff0c;降低成本。 [1.1] 云原生平台使…

【SpringMVC框架】--01.简介、入门、@RequestMapping、获取请求参数、域对象共享数据、视图、RestFul

文章目录 SpringMVC1.简介1.1 什么是MVC1.2 什么是SpringMVC1.3 SpringMVC的特点 2.编写HelloWorld2.1 创建maven工程2.2 配置web.xml2.3 创建请求控制器2.4 创建springMVC的配置文件2.5测试HelloWorld2.6总结 3.RequestMapping注解3.1 RequestMapping注解的功能3.2 RequestMap…

Java自定义类:打造属于自己的编程世界

&#x1f9d1;‍&#x1f4bb;CSDN主页&#xff1a;夏志121的主页 &#x1f4cb;专栏地址&#xff1a;Java核心技术专栏 目录 一、自定义类示例 二、隐式参数与显式参数 三、封装的优点 自定义类是Java中最基本、也是最重要的组成部分之一&#xff0c;使用者可以根据需求创建…

【Go微服务开发】gin+grpc+etcd 重构 grpc-todolist 项目

写在前面 最近稍微重构了之前写的 grpc-todolist 模块 项目地址&#xff1a;https://github.com/CocaineCong/grpc-todoList 1. 项目结构改变 与之前的目录有很大的区别 1.1 grpc_todolist 项目总体 1.1.1 改变前 grpc-todolist/ ├── api-gatway // 网关模块 ├── ta…

【小白版】最简单的 goland package 教程包括自定义包的使用

一、Hello World 最简单的教程&#xff0c;就需要从最简单的事情开始说起&#xff1a; mkdir myappcd myappgo mod init myapp // myapp是主项目名 这行命令将生成一个go.mod文件&#xff0c;这个文件会记录所有的包的依赖关系&#xff0c;一个空的go.mod只有项目名称和go版本…

智能指针详解

概念 在c中&#xff0c;动态内存的管理式通过一对运算符来完成的&#xff1a;new,在动态内存中为对象分配空间并返回一个指向该对象的指针&#xff0c;我们可以选择对对象进行初始化&#xff1b;delete&#xff0c;接受一个动态对象的指针&#xff0c;销毁该对象&#xff0c;并…