java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java数组的动态初始化和常见问题

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

作者:洛上言

本文介绍了数组动态初始化的概念,即在初始化时仅指定数组长度,系统会为数组分配初始值,而静态初始化则手动指定数组元素,系统根据元素个数计算数组长度,这两种初始化方式应用场景不同,另外,还讲述了数组默认初始化值的规律及数组常见问题,如越界问题等

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

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

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

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
    }
}

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

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行。

总结

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

您可能感兴趣的文章:
阅读全文