一篇文章搞定Java数组初始化,从此告别迷惑

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛

  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。

  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。

小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!

前言

  在Java程序开发中,数组是一个非常常用的数据类型。数组的初始化是使用数组来存储和处理数据的关键步骤之一。但是,关于Java数组的初始化,经常会让人感到迷惑。本文将详细介绍Java数组的初始化方法,帮助读者从此告别关于Java数组初始化的困惑。

摘要

  本文将通过源代码解析、应用场景案例、优缺点分析、类代码方法介绍、测试用例等角度,介绍Java数组的初始化方法。

Java数组

简介

什么是数组

  数组是Java中的一种容器,在数组中可以存储多个同类型的数据。Java数组是数据结构中最基本的数据类型之一,是一种线性数据结构。数组的元素可以通过下标访问,下标从0开始计数。

Java数组的初始化

  Java数组的初始化是在定义数组时为数组分配空间,并为数组元素赋初值的过程。Java数组可以通过以下几种方式进行初始化:

  1. 静态初始化:在定义数组时,直接为数组元素赋初值;
  2. 动态初始化:在定义数组时,只是指定了数组的长度,在使用时为其元素赋值。

源代码解析

静态初始化

  静态初始化是在定义数组时直接为数组元素赋初值的方式。可以使用以下两种方式进行静态初始化:

第一种方式:在定义数组时为数组元素赋初值
int[] arr = {1, 2, 3};

代码分析:

  这是一个声明并初始化一个名为arr的整型数组,包含三个元素,值分别为1、2、3。可以使用如下方式访问数组中的元素:

  • arr[0]:访问第一个元素,值为1
  • arr[1]:访问第二个元素,值为2
  • arr[2]:访问第三个元素,值为3
第二种方式:先定义数组,再为数组元素赋初值
int[] arr;
arr = new int[]{1, 2, 3};

代码分析:

  这段代码声明了一个整型数组变量arr,然后通过new操作符创建一个长度为3的整型数组并为其赋初值{1, 2, 3},最后将该数组的引用赋值给arr变量。可以通过以下方式访问数组中的元素:

arr[0] // 访问第一个元素,即1
arr[1] // 访问第二个元素,即2
arr[2] // 访问第三个元素,即3

动态初始化

  动态初始化是在定义数组时只是指定了数组的长度,在使用时为其元素赋初值的方式。可以使用以下方式进行动态初始化:

int[] arr = new int[3];
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;

代码分析:

  以上代码定义了一个整型数组arr,数组长度为3。接着,通过索引为0、1、2分别给数组的元素赋值为1、2、3。最终,数组arr中存储的值为{1, 2, 3}。

应用场景案例

静态初始化

  静态初始化可以用于初始化不变的数组。

final int[] arr = {1, 2, 3};

代码分析:

  这段代码定义了一个名为arr的int类型数组,包含三个元素1、2、3。由于使用了final关键字,表示该数组为不可修改的常量数组。

动态初始化

  动态初始化可以用于初始化可变数组,例如从控制台输入数据。

Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
    arr[i] = scanner.nextInt();
}

代码分析:

  这段代码使用了Java中的Scanner类,它可以用来从控制台读取用户输入的数据。代码首先通过nextInt()方法读取一个整数n,这个整数表示接下来将要输入的数组长度。然后,代码创建一个长度为n的整型数组arr,并通过for循环遍历数组,将用户输入的每个整数存储到数组中。最终得到的就是一个由用户输入的n个整数组成的数组。

优缺点分析

静态初始化

优点
  1. 代码简洁,易于理解;
  2. 可以一步到位地完成数组的初始化。
缺点
  1. 只适用于初始化不变的数组;
  2. 不支持运行时动态生成的数据。

动态初始化

优点
  1. 可以用于初始化可变的数组;
  2. 支持运行时动态生成的数据。
缺点
  1. 代码相对比较繁琐;
  2. 不能一步到位地完成数组的初始化。

类代码方法介绍

Array类

  Java提供了一个Array类,该类中包含了一些有用的方法,用于操作数组。

copyOf方法
public static <T,U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType)

  该方法用于将一个数组复制到一个新的数组中,并返回这个新的数组。newLength参数指定新数组的长度,newType参数指定新数组的类型。

代码分析:

  这是一个泛型方法,接收三个参数:

  1. U[] original: 原始数组,需要进行拷贝的数组。
  2. int newLength: 新数组的长度,即拷贝后的数组长度。
  3. Class<? extends T[]> newType: 新数组的类型。

  该方法的返回值类型为T[],即拷贝后的数组类型。

  由于该方法是泛型方法,因此可以支持不同类型的数组之间的拷贝,如将一个 Integer[] 拷贝成一个 String[]。

  该方法的实现方式是使用Java提供的Arrays.copyOf方法,将原数组拷贝到一个新的数组中。要求原数组和新数组的元素类型必须兼容,即原数组元素类型是新数组元素类型的子类型。如果原数组的长度小于新数组的长度,则会使用默认值填充新数组中未被拷贝的部分。否则,将会把原数组的元素全部拷贝到新数组中。

  最后,返回的是一个新的数组,其类型为T[],即拷贝后的数组类型。需要注意的是,newType参数用于指定新数组的类型,因此需要保证T[]是newType类型的子类型。

int[] arr1 = {1, 2, 3};
int[] arr2 = Arrays.copyOf(arr1, arr1.length);

代码分析:

  这段代码定义了两个int数组,arr1和arr2。

  第一行初始化了arr1,包含三个元素1、2、3。

  第二行使用Arrays.copyOf()方法将arr1复制到arr2中。

  因此,在执行完第二行代码后,arr2中也包含了三个元素1、2、3,且arr1和arr2分别指向不同的内存地址,互不干扰。

sort方法
public static void sort(int[] a)

该方法用于对一个数组进行排序。

代码分析:

  这是一个静态方法,可以通过类名直接调用,方法名为sort,参数为一个整型数组a。

  该方法实现的功能是对传入的整型数组a进行排序,具体的排序算法未知。

代码分析:

  这段代码定义了一个静态方法 sort,它接受一个整型数组 a 作为参数,并没有返回值。该方法的作用是对传入的数组 a 进行排序。

  具体实现方式和排序算法并未在代码中给出,需要根据上下文和方法命名来猜测,可能是使用某种排序算法(如冒泡排序、插入排序、快速排序等)对数组进行排序。

int[] arr = {3, 1, 2};
Arrays.sort(arr);

代码分析:

  这段代码创建了一个包含三个整数的数组 arr,即 {3, 1, 2}。然后使用 Arrays 类中的 sort() 方法对数组进行排序,在这种情况下,数组中的元素将会按升序排列。因此,执行完代码后,数组 arr 的值变为 {1, 2, 3}

toString方法
public static String toString(int[] a)

  该方法用于将一个数组转换为一个字符串,便于输出或打印。

代码分析:

  这是一个静态方法,它接受一个整型数组a作为参数,并返回一个字符串类型的值。

  该方法的作用是将整型数组a转换为字符串,并返回该字符串。

  它的实现方式是将整型数组a的每个元素使用逗号分隔,并放在方括号中。例如,如果a的值为{1,2,3},则该方法返回的字符串将是"[1,2,3]"。

  注意,该方法返回的字符串中,每个元素都用逗号分隔,最后一个元素后面没有逗号。同时,整个字符串被包括在方括号中。

int[] arr = {1, 2, 3};
System.out.println(Arrays.toString(arr));

代码分析:

  这段代码创建了一个包含整数1、2和3的数组,并使用Arrays类的toString方法将其打印到控制台。打印结果将是:

[1, 2, 3]

  这表明数组被正确创建并包含了期望的值。

测试用例

package com.example.javase.se.array;

import java.util.Arrays;

/**
 * @Author ms
 * @Date 2023-11-14 21:11
 */
public class ArrayTest2 {
    public static void main(String[] args) {
        // 静态初始化
        int[] arr1 = {1, 2, 3};
        System.out.println(Arrays.toString(arr1));
        // 动态初始化
        int[] arr2 = new int[3];
        arr2[0] = 1;
        arr2[1] = 2;
        arr2[2] = 3;
        System.out.println(Arrays.toString(arr2));
        // Array类
        int[] arr3 = {3, 1, 2};
        Arrays.sort(arr3);
        System.out.println(Arrays.toString(arr3));
    }
}

测试结果

  根据如上测试用例,本地测试结果如下,仅供参考,你们也可以自行修改测试用例或者添加更多的测试数据或测试方法,进行熟练学习以此加深理解。

在这里插入图片描述

测试代码分析

  根据如上测试用例,在此我给大家进行深入详细的解读一下测试代码,以便于更多的同学能够理解并加深印象。根据如上代码进行分析

  这是一个Java代码文件,主要演示了Java中数组的初始化和使用方法。代码中包含了三种数组初始化方式:

  1. 静态初始化:使用花括号{}初始化数组,其中包含了数组的元素。示例代码:int[] arr1 = {1, 2, 3};

  2. 动态初始化:使用 new 关键字创建一个指定长度的数组,然后使用下标来对元素进行赋值。示例代码:int[] arr2 = new int[3];

  3. 使用 Array 类对数组进行操作:使用 Java 内置的 Array 类对数组进行排序,示例代码:Arrays.sort(arr3);

  在最后,通过调用Arrays.toString()方法输出数组元素,方便查看。

全文小结

  本文介绍了Java数组的初始化方法,包括静态初始化和动态初始化。我们还介绍了Array类中的一些有用的方法,如copyOf方法,sort方法和toString方法,并提供了应用场景案例。最后,我们对静态初始化和动态初始化进行了优缺点分析,并提供了测试用例。

总结

  Java数组是一种非常基础的数据类型,在Java程序开发中经常被使用。本文通过源代码解析、应用场景案例、优缺点分析、类代码方法介绍、测试用例等角度,详细介绍了Java数组的初始化方法。读者可以根据本文的介绍和测试用例,更好地理解Java数组的相关知识。

… …

文末

好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。

… …

学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!

wished for you successed !!!


⭐️若喜欢我,就请关注我叭。

⭐️若对您有用,就请点赞叭。

⭐️若有疑问,就请评论留言告诉我叭。

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

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

相关文章

Java:集合框架

1.Collection接口 collection接口是Java最基本的集合接口&#xff0c;它定义了一组允许重复的对象。它虽然不能直接创建实例&#xff0c;但是它派生了两个字接口List和Set&#xff0c;可以使用子接口的实现类创建实例。Collection 接口是抽取List接口和Set接口共同的存储特点和…

2024.6.10学习记录

1、代码随想录二刷 2、项目难点 review 3、计组复习

6-Maven的使用

6-Maven的使用 常用maven命令 //常用maven命令 mvn -v //查看版本 mvn archetype:create //创建 Maven 项目 mvn compile //编译源代码 mvn test-compile //编译测试代码 mvn test //运行应用程序中的单元测试 mvn site //生成项目相关信息的网站 mvn package //依据项目生成 …

线程知识点总结

Java线程是Java并发编程中的核心概念之一&#xff0c;它允许程序同时执行多个任务。以下是关于Java线程的一些关键知识点总结&#xff1a; 1. 线程的创建与启动 继承Thread类&#xff1a;创建一个新的类继承Thread类&#xff0c;并重写其run()方法。通过创建该类的实例并调用st…

代码随想录算法训练营第三十二天| 122.买卖股票的最佳时机II,55. 跳跃游戏 ,45.跳跃游戏II

122. 买卖股票的最佳时机 II - 力扣&#xff08;LeetCode&#xff09; class Solution {public int maxProfit(int[] prices) {if(prices.length 0){return 0;}int min prices[0];int result 0;for(int i1;i<prices.length;i){if(prices[i] > min){result (prices[i]…

【SQL】牛客网SQL非技术入门40道代码|练习记录

跟着刷题&#xff1a;是橘长不是局长哦_哔哩哔哩_bilibili 6查询学校是北大的学生信息 select device_id, university from user_profile where university 北京大学 7查找年龄大于24岁的用户信息 select device_id, gender, age, university from user_profile where age…

【C++初阶学习】第十三弹——优先级队列及容器适配器

C语言栈&#xff1a;数据结构——栈(C语言版)-CSDN博客 C语言队列&#xff1a;数据结构——队列&#xff08;C语言版&#xff09;-CSDN博客 C栈与队列&#xff1a;【C初阶学习】第十二弹——stack和queue的介绍和使用-CSDN博客 前言&#xff1a; 在前面&#xff0c;我们已经…

使用 C# 学习面向对象编程:第 1 部分

介绍 C# 完全基于面向对象编程 (OOP)。首先&#xff0c;类是一组相似的方法和变量。在大多数情况下&#xff0c;类包含变量、方法等的定义。当您创建此类的实例时&#xff0c;它被称为对象。在此对象上&#xff0c;您可以使用定义的方法和变量。 步骤1. 创建名为“LearnClass…

⌈ 传知代码 ⌋ 记忆大师

&#x1f49b;前情提要&#x1f49b; 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间&#xff0c;对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…

从信号灯到泊车位,ARMxy如何重塑城市交通智能化

城市智能交通系统的高效运行对于缓解交通拥堵、提高出行安全及优化城市管理至关重要。ARMxy工业计算机&#xff0c;作为这一领域内的技术先锋&#xff0c;正以其强大的性能和灵活性&#xff0c;悄然推动着交通管理的智能化升级。 智能信号控制的精细化管理 想象一下&#xff0…

[发布]嵌入式系统远程测控软件-基于Qt

目录 一. 引言二. 软件功能2.1 原理2.2 软件功能2.3 运行环境 三. 软件操作使用3.1 软件界面3.2 软件功能使用详解3.2.1 连接3.2.2 数据监测3.2.3 数据修改3.2.4 数据保存 3.3 软件的硬件连接 四. 通信协议——STM32移植篇4.1 通信协议4.2 STM32如何传输浮点数4.3 简单移植&…

使用Redis的优势以及会引发的问题

优势 ①使用redis代表着高性能还有高并发&#xff0c;高性能很好理解&#xff0c;redis会缓存我们访问的数据。他是基于内存的&#xff0c;第一次访问数据库我们可能需要800ms&#xff0c;但是访问后如果使用redis进行缓存&#xff0c;第二次乃至后面访问相同的数据就只需要去…

嵌入式仪器模块:示波器模块和自动化测试软件

示波器模块 • 32 位分辨率 • 125 MSPS 采样率 • 支持单通道/双通道模块选择 • 低速模式可实现实时功率分布和整机功率检测 • 高速模式可实现信号分析和上电时序测量 应用场景 • 抓取并分析波形的周期、幅值、异常信号等指标 • 电源纹波与噪声分析 • 信号模板比…

档案数字化管理的工具有哪些

档案数字化管理的工具可以包括以下几种&#xff1a; 1. 扫描仪/数字拍摄仪&#xff1a;用于将纸质文件数字化为电子文件的工具。 2. OCR&#xff08;光学字符识别&#xff09;软件&#xff1a;用于将扫描或拍摄的图像文件转换为可编辑的文本文件。 3. 文件管理系统/专久智能电子…

RAG检索与生成的融合

1、rag定义 检索增强生成 (RAG) 模型代表了检索系统和生成模型两大不同但互补组件完美结合的杰作。通过无缝整合相关信息检索和生成与背景相关的响应&#xff0c;RAG模型在人工智能领域达到了前所未有的复杂程度。 2、rag工作流程 2.1、rag整体框架 query通过llm处理后&…

doris FE 在Windows环境下编译调试开发环境

前言&#xff1a; doris fe 在win下调试运行&#xff0c;和正常java项目有一些差异&#xff0c;主要是有与be&#xff08;c&#xff09;通信代码的生成 在win环境下不能直接生成&#xff0c;因此需要现在linux下生成之后&#xff0c;再拷贝到本地来&#xff0c;然后进行编译&a…

王学岗鸿蒙开发(北向)——————(十三)音乐播放器

AudioRenderer适合录音 AVPlayer:简单的本地单曲播放 MP3文件放置的地方 import media from ohos.multimedia.media import common from ohos.app.ability.common; Entry Component struct Index {//第1步&#xff1a;avPlayer:media.AVPlayer nullasync onPageShow(){//第…

665. 非递减数列(中等)

665. 非递减数列 1. 题目描述2.详细题解3.代码实现3.1 Python3.2 Java 1. 题目描述 题目中转&#xff1a;665. 非递减数列 2.详细题解 判断在最多改变 1 个元素的情况下&#xff0c;该数组能否变成一个非递减数列&#xff0c;一看到题目&#xff0c;不就是遍历判断有几处不…

解决阿里云的端口添加安全组仍然无法扫描到

发现用线上的网站扫不到这个端口&#xff0c;这个端口关了&#xff0c;但是没有更详细信息了 我用nmap扫了一下我的这个端口&#xff0c;发现主机是活跃的&#xff0c;但是有防火墙&#xff0c;我们列出云服务器上面的这个防火墙list&#xff0c;发现确实没有5566端口 参考&a…

Python框架scrapy有什么天赋异禀

Scrapy框架与一般的爬虫代码之间有几个显著的区别&#xff0c;这些差异主要体现在设计模式、代码结构、执行效率以及可扩展性等方面。下面是一些关键的不同点&#xff1a; 结构化与模块化&#xff1a; Scrapy&#xff1a;提供了高度结构化的框架&#xff0c;包括定义好的Spider…