28-Java静态初始化数组、访问数组元素值以及注意事项

一、静态初始化数组

  • 定义数组的时候直接给数组赋值。

二、静态初始化数组的格式

// 1.完整格式
数据类型[] 数组名 = new 数据类型[]{元素1, 元素2, 元素3, ...};
// 例子
double[] scores = new double[]{99.8, 78.5, 65.5, 89.0};
int[] ages = new int[]{18, 20, 21, 23};

// 2.简化格式
数据类型[] 数组名 = {元素1, 元素2, 元素3, ...};
// 例子
double[] scores2 = {99.8, 78.5, 65.5, 89.0};
int[] ages2 = {18, 20, 21, 23};

package com.app.create;

public class ArrayDemo1 {
    public static void main(String[] args) {
        // 目标:学会使用静态初始化的方式定义数组
        // 完整格式:数据类型[] 数组名 = new 数据类型[]{元素1, 元素2, 元素3, ...};
        // 简化格式:数据类型[] 数组名 = {元素1, 元素2, 元素3, ...};  ————>常用(简便)
        /*
            需求:
                将这些学生的分数:88.5,99,95.5
                学生的年龄:21,22,19
                学生的姓名:张飞, 关羽, 老六
                分别定义一个数组存起来
         */
        // 定义一个double类型的数组scores,用于存放班级学生的分数
        // double[] scores = new double[]{88.5, 99.0, 95.5};    // 完整格式
        double[] scores = {88.5, 99.0, 95.5};   // 简化格式

        // 定义一个int类型的数组ages,用于存放班级学生的年龄
        // int[] ages = new int[]{21, 22, 19};     // 完整格式
        int[] ages = {21, 22, 19};    // 简化格式

        // 定义一个String类型的数组names,用于存放班级学生的姓名
        // String[] names = new String[]{"张飞", "关羽", "老六"};    // 完整格式
        String[] names = {"张飞", "关羽", "老六"};    // 简化格式
    }
}

三、数组的基本原理

  • java是如何将 int[] ages = {21, 22, 19}; 这个数组存入内存的???

在这里插入图片描述

  • 接下来咱们就来理解一下这一串地址到底是啥意思?

    package com.app.create;
    
    public class ArrayDemo1 {
        public static void main(String[] args) {
            // 定义一个int类型的数组ages,用于存放班级学生的年龄
            // int[] ages = new int[]{21, 22, 19};     // 完整格式
            int[] ages = {21, 22, 19};    // 简化格式
    
            // 输出ages到控制台
            System.out.println(ages);
        }
    }
    
    输出结果:
    
    [I@119d7047
    
    

在这里插入图片描述

注意:数组变量中存储的是数组在内存中的地址,数组是引用类型。

  • 什么是引用类型
    • 数组ages,存放的是一个地址:[I@119d7047
    • 数组ages是根据这个地址,去引用这个对象,也就是根据这个地址去找这个对象,所以就叫引用类型
静态初始化数组总结

1、数组的静态初始化的写法与特点是什么?

  • 写法

    // 完整格式
    数据类型[] 数组名 = new 数据类型[]{元素1, 元素2, 元素3, ...};
    // 例子
    double[] scores = new double[]{100.0, 89.5, 65.7};
    
    // 简化格式
    数据类型[] 数组名 = {元素1, 元素2, 元素3, ...};
    // 例子
    double[] scores = {100.0, 89.5, 65.7};
    
  • 特点

    • 定义数组时,就已经进行赋值了

2、数组是属于什么类型,数组变量名中存储的是什么?

  • 数组属于引用数据类型,存储的是数组在内存中的地址信息

四、数组的访问

  • 1、先回顾一下数组在内存中的基本原理

    在这里插入图片描述

  • 上图中将 length 误写成 lenght 了,请大家原谅我的眼拙!正确的是:length

五、数组的访问格式

  • 访问格式

    数据名称[索引]
    
  • 取值

    int[] ages = {21, 22, 19};  // 数组元素为:21 22 19,length(长度):3
    
    // 取值:输出数组ages第3个位置的值
    System.out.println(ages[2]);	// 为啥是2呢?因为java是从0开始数,0 1 2,第三个位置的索引为:2
    
    输出结果:
    19
    
    
  • 赋值

    int[] ages = {21, 22, 19};  // 数组元素为:21 22 19,length(长度):3
    
    // 赋值:将数组ages第2个位置的值 修改为:90,并输出
    ages[1] = 90;
    System.out.println(ages[1]);
    
    输出结果:
    90
    
    
  • 访问数组的长度

    格式:
    数据名.length
    
    int[] ages = {21, 22, 19};  // 数组元素为:21 22 19,length(长度):3
    
    // 输出数组ages的长度
    System.out.println(ages.length);
    
    输出结果:
    3
    
    
  • 练一练

package com.app.create;

public class ArrayDemo2 {
    public static void main(String[] args) {
        // 目标:学会访问数组的元素(数据)
        // 访问格式:数组名称[索引]
        // 定义一个数组,名称为ages,元素有:12, 22, 30, 50
        int[] ages = {12, 22, 30, 50};
        //索引:        0   1   2   3

        // 1.取值:取出数组ages所有的元素
        // 方式1:直接输出
        System.out.println("------------取值方式1——直接输出------------");
        System.out.println("第一个元素:" + ages[0]);
        System.out.println("第二个元素:" + ages[1]);
        System.out.println("第三个元素:" + ages[2]);
        System.out.println("第四个元素:" + ages[3]);
        // 方式2:取出先存放,再输出
        System.out.println("\n-----------取值方式2——先存后输出-----------");
        // 先将每个元素用变量存放起来
        int one = ages[0];      // 第一个元素
        int two = ages[1];      // 二
        int three = ages[2];    // 三
        int four  = ages[3];    // 四
        // 后将每个取出的元素输出
        System.out.println("第一个元素:" + one);
        System.out.println("第二个元素:" + two);
        System.out.println("第三个元素:" + three);
        System.out.println("第四个元素:" + four);

        // 2.赋值
        // 将99赋值给数组ages第3个位置
        System.out.println("\n-----------将99赋值给数组ages第3个位置-----------");
        ages[2] = 99;
        System.out.println("赋值后的第三个元素:" + ages[2]);

        // 3.访问数组长度
        System.out.println("\n-----------访问数组长度-----------");
        int agesLength = ages.length;
        System.out.println("数组长度为:" + agesLength);
    }
}
输出结果:
------------取值方式1——直接输出------------
第一个元素:12
第二个元素:22
第三个元素:30
第四个元素:50

-----------取值方式2——先存后输出-----------
第一个元素:12
第二个元素:22
第三个元素:30
第四个元素:50

-----------将99赋值给数组ages第3个位置-----------
赋值后的第三个元素:99

-----------访问数组长度-----------
数组长度为:4

问题:数组的最大索引可以怎么表示?
  • 索引:必须大于等于 0

  • 前提:数组的元素个数必须 大于0,才存在索引,然后才存在最大索引

  • 分三种情况来解释

    表示格式:
    数组名.length-1	// 数组的长度 -1,就得出当前数组的最大索引
    
    • 1、当数组中只有一个元素时

      // 1、当数组中只有一个元素时
      double[] scores = {56.9};
      // 索引              0
      // 0,因为 数组名.length-1 = 1-1 = 0
      System.out.println(scores.length-1);	
      
      输出结果:
      0
      
      
    • 2、当数组中有一个以上的元素时

      // 2、当数组中有一个以上的元素时
      int[] ages = {14, 15, 17};
      // 索引        0   1   2
      // 2,因为 数组名.length-1 = 3-1 = 2
      System.out.println(ages.length-1);
      
      输出结果:
      2
      
      
    • 3、当数组中没有元素时,就不存在最大索引

      // 3、当数组中没有元素时,就不存在最大索引
      String[] names = {};
      // 没有元素,不存在索引,更不存在最大索引
      System.out.println(names.length-1);
      
      输出结果:
      -1
      
      
访问数组总结

1、如何访问数组的元素?

  • 取值

    数组名[索引]
    

2、如何访问数组的长度?

  • 数组名.length
    

2、数组的最大索引如何获取?

  • 数组名.length-1	// 前提:数组里的元素个数大于0
    

六、数组的几个注意事项

  • 1、“数据类型[] 数组名” 也可以写成 “数据类型 数组名[]

    • // 1.“数据类型[] 数组名”  也可以写成 “数据类型 数组名[]”
      // 这两种写法都是数组,推荐使用第一种,常见;第二种要知道有这么回事
      int[] ages = {1, 3, 4};
      int ages2[] = {1, 3, 4};
      
  • 2、属于什么类型的数组就存放属于什么类型的数据,否则报错

    • 在这里插入图片描述

    • 注意: ‘a’ 等一些字符,是对应ASCII码表中的十进制数,然后再以二进制进行存储的,所以 ‘a’ 放在数组中不会报错

  • 3、数组一旦定义出来,程序执行过程中,长度、类型就固定了

    • // 3.数组一旦定义出来,程序执行过程中,长度、类型就固定了
      int[] ages4 = {1, 3, 4};
      // 测试长度是不是固定的: 数组中有3个元素,长度为3,访问第4个元素,看看控制台会不会报错
      System.out.println(ages4[3]);
      
      输出结果:
      Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3   at com.app.create.ArrayDemo4.main(ArrayDemo4.java:22)
      
      
    • 上图错误说明:索引 3 超出长度 3 的范围

    • 在这里插入图片描述

    • 上图错误说明:这里需要的类型是 int,你提供的类型是 double

    • 经测试得出结论:数组一旦定义出来,程序执行过程中,长度、类型就固定了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值