Java数组的动态初始化和常见问题解析

 更新时间:2024年10月21日 11:26:47   作者:洛上言  
本文介绍了数组动态初始化的概念,即在初始化时仅指定数组长度,系统会为数组分配初始值,而静态初始化则手动指定数组元素,系统根据元素个数计算数组长度,这两种初始化方式应用场景不同,另外,还讲述了数组默认初始化值的规律及数组常见问题,如越界问题等

一、为什么有数组动态初始化呢?

如果一开始就知道数组里的数据,就可以使用静态初始化去完成。

但是如果一开始就不知道要添加什么数据,那此时大括号中写什么呢?

int[] arr = {1, 2, 3, 4, 5};
int[] arr = {????}

是不是感觉写什么都不太合适。所以动态初始化和静态初始化的应用场景是不一样的。

二、动态初始化

动态初始化:初始化时只指定数组长度,由系统为数组分配初始值。

格式:

数据类型[] 数组名 = new 数据类型[数组长度];

示例:

下述代码表示arr数组里只能存3个int类型的整数。

int[] arr = new int[3];

三、代码示例

需求:

定义一个数组,用来存班级中50个学生的姓名。

姓名未知,等学生报道之后,再进行添加。

package com.itheima.arraydemo;

public class ArrayDemo4 {
    public static void main(String[] args) {
        //格式:
        //数据类型[] 数组名 = new 数据类型[数组的长度];
        //在创建的时候,由我们自己指定数组的长度,由虚拟机给出默认的初始化值

        String[] arr = new String[50];
        //添加学生
        arr[0] = "zhangsan";
        arr[1] = "lisi";
        //获取
        System.out.println(arr[0]);//zhangsan
        System.out.println(arr[1]);//lisi
        System.out.println(arr[2]);//打印出来的是默认初始化值null
    }
}

四、数组默认初始化值的规律

  • 整数类型:默认初始化值0
  • 小数类型:默认初始化值0.0
  • 字符类型:默认初始化值’\u0000’ 空格
  • 布尔类型:默认初始化值 false
  • 引用数据类型:默认初始化值 null,String就是一个引用数据类型
int[] arr2 = new int[3];
System.out.println(arr2[0]);//0
System.out.println(arr2[1]);//0
System.out.println(arr2[2]);//0

五、数组动态初始化和静态初始化的区别

1、动态初始化:手动指定数组长度,由系统给出默认初始化值。

只明确元素个数,不明确具体数值,推荐使用动态初始化

例如:使用数组容器来存储键盘录入的5个整数。

int[] arr = {????}; // 不明确数组中应该存储哪些
int[] arr = new int[5]; // 就使用动态初始化

2、静态初始化:手动指定数组元素,系统会根据元素个数,计算出数组的长度。

需求中已经明确了要操作的具体数据,直接静态初始化即可。

例如:将全班的学生成绩存入数组中:11,22 ,33

int[] arr = {11, 22, 33};

六、数组常见问题:越界

当访问了数组中不存在的索引,就会引发索引越界异常

package com.itheima.arraydemo;

public class ArrayDemo5 {
    public static void main(String[] args) {
        //1.定义一个数组
        int[] arr = {1,2,3,4,5};
        //长度:5
        //最小索引:0
        //最大索引:4(数组的长度 - 1)
        //如果访问的数字不在这个范围(0 ~ 4)就会报索引越界异常
        System.out.println(arr[2]);


        //小结:
        //索引越界异常
        //原因:访问了不存在的索引
        //避免:只要知道索引的范围就行了
        //最小索引:0
        //最大索引:(数组的长度 - 1)
    }
}

下图的红色就表示代码出现了问题,通常我们也会说代码报错了。

阅读报错的信息:Exception:异常,异常在main里。java.lang.ArrayIndexOutOfBoundsException 是异常的名字,叫做:索引越界异常。后面就会紧接着异常出现的解释:

Index 10 out of bounds for length 5

索引10已经超过了长度为5的数组。

at:表示 com.itheima.arraydemo 是包名,ArrayDemo5 是类名。

main 是方法名。ArrayDemo5.java:10 表示异常出现的位置,这里就表示在第10行出现了问题。

点一下,它就会自动跳转到第10行。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SpringBoot防止消息重复消费的方法步骤

    SpringBoot防止消息重复消费的方法步骤

    这段文章详细介绍了消息队列中消息重复消费的问题及解决方案,重点讲解了Redis唯一ID防重、数据库唯一索引防重、业务状态机防重和全局唯一约束防重四种方案,适合不同业务场景和并发量的需求,需要的朋友可以参考下
    2026-05-05
  • java操作mongodb实现CURD功能实例

    java操作mongodb实现CURD功能实例

    mongodb支持多种语言,并且提供了多种语言的驱动,本文使用java操作mongodb实现CURD功能,大家参考使用吧
    2013-12-12
  • jar运行报错no main manifest attribute原因分析及解决

    jar运行报错no main manifest attribute原因分析及解决

    文章主要讨论了在使用`java -jar`命令运行jar包时遇到的“nomainmanifestattribute”错误,并提供了可能的解决方案,包括检查pom.xml配置,添加打包插件配置,以及使用IDEA进行打包等方法
    2026-04-04
  • MyBatis中#{} 和 ${} 的区别和动态 SQL详解

    MyBatis中#{} 和 ${} 的区别和动态 SQL详解

    这篇文章主要介绍了MyBatis中#{}和${}的区别,包括参数传递、安全性、性能等方面,然后详细介绍了如何使用#{}和${}进行排序、模糊查询、动态SQL、数据库连接池等操作,最后,总结了注解方式的动态SQL,感兴趣的朋友跟随小编一起看看吧
    2024-11-11
  • Spring Cloud之配置中心的搭建

    Spring Cloud之配置中心的搭建

    这篇文章主要介绍了Spring Cloud之配置中心的搭建,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • 提升网络请求稳定性HttpClient的重试机制深入理解

    提升网络请求稳定性HttpClient的重试机制深入理解

    这篇文章主要为大家介绍了提升网络请求稳定性HttpClient的重试机制深入理解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • SpringBoot使用validation-api实现对枚举类参数校验的方法

    SpringBoot使用validation-api实现对枚举类参数校验的方法

    这篇文章主要介绍了SpringBoot使用validation-api实现对枚举类参数校验,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • 基于SpringBoot和MySQL实现图片CRUD的三种解决方案

    基于SpringBoot和MySQL实现图片CRUD的三种解决方案

    在基于 Spring Boot 和 MySQL 开发的后端程序中,处理图片的增删改查(CRUD)通常涉及到两个核心部分:存储图片路径信息到数据库和实际文件操作(上传、删除等),以下是几种常见的解决方案,分别详细说明其使用方法,并对比优缺点,需要的朋友可以参考下
    2025-08-08
  • java程序中指定某个浏览器打开的实现方法

    java程序中指定某个浏览器打开的实现方法

    最近工作中遇到一个需求,是要利用java打开指定浏览器,整理后发现有四种解决的方法,所以想着分享出来,下面这篇文章主要给大家介绍了java程序中指定某个浏览器打开的实现方法,,需要的朋友可以参考下。
    2017-03-03
  • 实例讲解MyBatis如何防止SQL注入

    实例讲解MyBatis如何防止SQL注入

    这篇文章通过实例代码介绍MyBatis如何防止SQL注入,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-12-12

最新评论